====== Scenarij 2.1: Ustvarjanje strežniškega CSR ======
**Kategorija:** [[.:start|Zahteve za certifikate (CSR)]] \\
**Kompleksnost:** 2/5 (Srednja) \\
**Predpogoji:** Par ključev na voljo \\
**Ocenjeni čas:** 5-10 minut
----
===== Opis =====
Ta scenarij opisuje ustvarjanje **Certificate Signing Request (CSR)** za TLS-strežniški certifikat. CSR vsebuje vse informacije, ki jih CA potrebuje za izdajo strežniškega certifikata.
**Kaj se ustvari:**
* ML-DSA-65 par ključev (ali hibridni)
* CSR s strežniškim DN in razširitvami
* Subject Alternative Names (SAN) za DNS-imena
**Primeri uporabe:**
* HTTPS spletni strežniki
* API-končne točke
* Mikrostoritve s TLS
----
===== Potek dela =====
flowchart LR
KEY[Generiranje para ključev] --> DN[Ustvarjanje DN]
DN --> EXT[Nastavitev razširitev]
EXT --> CSR[Ustvarjanje CSR]
CSR --> SIGN[Podpisovanje CSR]
SIGN --> EXPORT[Izvoz kot PEM]
style CSR fill:#e8f5e9
----
===== Vključene funkcije =====
^ Korak ^ FFI-funkcija ^ Opis ^
| 1 | ''wvds_sec_crypto_x509_keypair_generate_mldsa(65)'' | Generiranje para ključev |
| 2 | ''wvds_sec_crypto_x509_dn_create()'' | Ustvarjanje DN-ročaja |
| 3 | ''wvds_sec_crypto_x509_dn_add_component()'' | Dodajanje CN, O, C |
| 4 | ''wvds_sec_crypto_x509_ext_set_san_dns()'' | Dodajanje DNS-imen |
| 5 | ''wvds_sec_crypto_x509_ext_set_key_usage()'' | digitalSignature, keyEncipherment |
| 6 | ''wvds_sec_crypto_x509_ext_set_eku()'' | serverAuth |
| 7 | ''wvds_sec_crypto_x509_csr_create()'' | Ustvarjanje CSR |
| 8 | ''wvds_sec_crypto_x509_csr_sign()'' | Podpisovanje CSR z zasebnim ključem |
| 9 | ''wvds_sec_crypto_x509_csr_to_pem()'' | Izvoz kot PEM |
----
===== Primer kode (C#) =====
using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
// 1. Inicializacija konteksta
using var ctx = PqCryptoContext.Initialize();
// 2. Generiranje para ključev za strežnik
using var serverKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65);
// 3. Distinguished Name
var dn = new DnBuilder()
.AddCN("www.example.com")
.AddO("Example d.o.o.")
.AddOU("IT-oddelek")
.AddC("SI")
.AddL("Ljubljana")
.Build();
// 4. Razširitve za strežniški certifikat
var extensions = new ExtBuilder()
.SubjectAlternativeName(new[] {
"www.example.com",
"example.com",
"api.example.com"
})
.KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment)
.ExtendedKeyUsage(ExtKeyUsage.ServerAuth)
.Build();
// 5. Ustvarjanje in podpisovanje CSR
var csr = ctx.CreateCertificateRequest(serverKey, dn, extensions);
// 6. Shranjevanje kot PEM
File.WriteAllText("server.csr.pem", csr.ToPem());
File.WriteAllText("server.key.pem", serverKey.ToEncryptedPem("VarnoGeslo123!"));
Console.WriteLine("CSR ustvarjen: server.csr.pem");
Console.WriteLine($"Subject: {csr.Subject}");
Console.WriteLine($"SANs: {string.Join(", ", csr.SubjectAlternativeNames)}");
----
===== Parametri =====
==== Subject Alternative Names ====
^ Tip ^ Predpona ^ Primer ^
| DNS-ime | dns: | www.example.com |
| IP-naslov | ip: | 192.168.1.100 |
| E-pošta | email: | admin@example.com |
| URI | uri: | https://example.com |
==== Key Usage za strežnike ====
^ Zastavica ^ Opis ^ Obvezno ^
| digitalSignature | Podpisovanje TLS-handshake | Da |
| keyEncipherment | RSA Key Exchange (ne za ECDHE) | Opcijsko |
| keyAgreement | ECDH Key Exchange | Opcijsko |
----
===== Izhodne datoteke =====
==== server.csr.pem ====
-----BEGIN CERTIFICATE REQUEST-----
MIICxjCCAi0CAQAwgYExCz... (Base64 DER)
-----END CERTIFICATE REQUEST-----
^ Polje ^ Vrednost ^
| Version | 1 (0x00) |
| Subject | CN=www.example.com, O=Example d.o.o., C=SI |
| Public Key | ML-DSA-65 (~1.952 bajtov) |
| Attributes | Extension Request (SAN, Key Usage, EKU) |
| Signature | ML-DSA-65 (Self-Proof-of-Possession) |
----
===== Pogoste napake =====
^ Problem ^ Vzrok ^ Rešitev ^
| CSR zavrnjen | CN ni v SAN | CN vedno dodajte tudi kot SAN |
| CA ne sprejme CSR | Napačen format | Preverite PEM-format |
| Key Usage manjka | Razširitve niso nastavljene | Uporabite ExtBuilder |
----
===== Povezani scenariji =====
^ Povezava ^ Scenarij ^ Opis ^
| **Naslednji korak** | [[sl:int:pqcrypt:szenarien:zertifikate:server_cert|3.1 Strežniški certifikat]] | Podpis CSR s strani CA |
| **Alternativa** | [[.:csr_multi_san|2.3 Multi-SAN CSR]] | Več domen |
| **Povezano** | [[.:csr_client|2.2 Odjemalčev CSR]] | Za overitev odjemalca |
----
<< [[.:start|Pregled CSR]] | [[sl:int:pqcrypt:szenarien:start|Scenariji]] | [[.:csr_client|2.2 Odjemalčev CSR]] >>
{{tag>scenarij csr strežnik tls san ml-dsa}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//