Farbschema: Dunkel
Sie befinden sich hier: start » de » Dokumentation » Post-Quanten-Kryptografie » WKL.System.Security.Cryptography – Überblick » Anleitungen » So übertragen Sie Zertifikate mit PQ-Schlüssel als PFX

So übertragen Sie Zertifikate mit PQ-Schlüssel als PFX

Sie wollen ein Zertifikat mit seinem klassischen und seinem PQ-Schlüssel in einen anderen Prozess oder auf einen anderen Rechner bringen, etwa vom Ausstellungsrechner auf den Server, der das Zertifikat verwendet.

Lösungsübersicht

ElementZweck
ExportPfx(password)schreibt Zertifikat, klassischen und PQ-Schlüssel in eine PKCS#12-Datei
X509Certificate2ExportExtensions.ImportPfx(bytes, password, flags)liest die Datei und ordnet den PQ-Schlüssel wieder zu
X509Certificate2Collection.ExportPfx, ImportPfxCollectiondasselbe für mehrere Zertifikate, etwa mit Kette
ExportPfx(password, pbeParameters)wie oben, mit selbst gewählter Verschlüsselung

Umsetzung

Exportieren; server ist ein Zertifikat mit klassischem und PQ-Schlüssel im Prozess:

using var serverRsa = RSA.Create(3072);
using var server = new CertificateRequest(
        "CN=www.example.com", serverRsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1)
    .CreateSelfSigned(DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddYears(1), CryptoMode.Hybrid);
 
string password = Convert.ToBase64String(RandomNumberGenerator.GetBytes(24));
File.WriteAllBytes("www.example.com.pfx", server.ExportPfx(password));

Importieren im anderen Prozess:

using var imported = X509Certificate2ExportExtensions.ImportPfx(
    File.ReadAllBytes("www.example.com.pfx"), password, X509KeyStorageFlags.EphemeralKeySet);
 
using (var pqKey = imported.GetAlternativePrivateMLDsaKey())
{
    Console.WriteLine($"RSA: {imported.HasPrivateKey}, ML-DSA: {pqKey is not null}");
}

Für ein Programm, das PBES2 nicht liest, schreiben Sie die Triple-DES-Fassung ausdrücklich:

var legacy = new PbeParameters(PbeEncryptionAlgorithm.TripleDes3KeyPkcs12, HashAlgorithmName.SHA1, 2000);
File.WriteAllBytes("www.example.com-3des.pfx", server.ExportPfx(password, legacy));

Hinweise

  • Mit der Bibliothek importieren. new X509Certificate2(pfx, password) von .NET liest die Datei ebenfalls und übernimmt Zertifikat und klassischen Schlüssel, übergeht aber den PQ-Schlüssel. Nur ImportPfx ordnet ihn zu.
  • Kein Export ohne PQ-Schlüssel. Fordern Sie mit ExportPfx(password, CryptoMode.Hybrid) ausdrücklich einen PQ-Export an und kennt der Prozess keinen PQ-Schlüssel, wirft die Methode eine CryptographicException, statt still eine Datei ohne PQ-Schlüssel zu schreiben.
  • Reine ML-DSA-Zertifikate. Für sie trägt die Datei nur den ML-DSA-Schlüssel. Nach dem Import liefert GetPrivateMLDsaKey den Schlüssel; HasPrivateKey bleibt false.
  • Verschlüsselung. Ohne PbeParameters verschlüsselt ExportPfx mit PQ-Schlüssel nach PBES2: AES-256-CBC, PBKDF2 mit HMAC-SHA-256 und 2048 Wiederholungen, MAC mit SHA-256. Mit PbeParameters gelten Aes128Cbc, Aes192Cbc oder Aes256Cbc mit SHA-1, SHA-256, SHA-384 oder SHA-512, oder TripleDes3KeyPkcs12 mit SHA-1. Andere Kombinationen weist die Methode mit einer CryptographicException ab. Unter .NET Framework stellt die Bibliothek PbeParameters und PbeEncryptionAlgorithm selbst bereit, im Namensraum System.Security.Cryptography.
  • CryptoMode.Classic. Ohne PbeParameters schreibt ExportPfx genau die Datei, die Export(X509ContentType.Pfx, password) von .NET schreibt, ohne PQ-Schlüssel und mit der Verschlüsselung von .NET.
  • Kennwort und Datei schützen. Die Datei ist nur so sicher wie ihr Kennwort. Verwenden Sie ein langes, zufälliges Kennwort, übertragen Sie es auf einem anderen Weg als die Datei und löschen Sie die Datei nach dem Import.
  • .NET 8 unter Linux. Trägt das Zertifikat selbst einen ML-DSA- oder ML-KEM-Schlüssel, also kein RSA oder ECDSA, liest .NET 8 unter Linux die PFX-Datei nicht; ImportPfx scheitert dort mit der CryptographicException von .NET. Hybride Zertifikate betrifft das nicht. Übertragen Sie solche Zertifikate unter Linux als PEM-Datei und ordnen Sie den Schlüssel mit der passenden Attach-Methode zu.

Verwandte Themen

de/wiki/pqcrypt/lib/how-to/export-and-import-pfx.txt · Zuletzt geändert: von Wolfgang van der Stille