Prenos potrdil s ključem PQ v datoteki PFX
Potrdilo s klasičnim ključem in ključem PQ želite prenesti v drug proces ali na drug računalnik, na primer z računalnika, na katerem ga izdate, na strežnik, ki ga uporablja.
Pregled rešitve
| Element | Namen |
|---|---|
ExportPfx(password) | zapiše potrdilo, klasični ključ in ključ PQ v datoteko PKCS #12 |
X509Certificate2ExportExtensions.ImportPfx(bytes, password, flags) | prebere datoteko in znova dodeli ključ PQ |
X509Certificate2Collection.ExportPfx, ImportPfxCollection | isto za več potrdil, na primer z verigo |
ExportPfx(password, pbeParameters) | kot zgoraj, s šifriranjem po lastni izbiri |
Izvedba
Izvoz; server je potrdilo s klasičnim ključem in ključem PQ v procesu:
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));
Uvoz v drugem procesu:
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}"); }
Za program, ki PBES2 ne bere, izrecno zapišite različico s Triple DES:
var legacy = new PbeParameters(PbeEncryptionAlgorithm.TripleDes3KeyPkcs12, HashAlgorithmName.SHA1, 2000); File.WriteAllBytes("www.example.com-3des.pfx", server.ExportPfx(password, legacy));
Opombe
- Uvažajte s knjižnico.
new X509Certificate2(pfx, password)iz .NET datoteko prav tako prebere in prevzame potrdilo in klasični ključ, ključ PQ pa preskoči. Dodeli ga samoImportPfx. - Brez izvoza brez ključa PQ. Če z
ExportPfx(password, CryptoMode.Hybrid)izrecno zahtevate izvoz PQ, proces pa ključa PQ ne pozna, metoda sprožiCryptographicException, namesto da bi tiho zapisala datoteko brez ključa PQ. - Čista potrdila ML-DSA. Pri njih datoteka nosi samo ključ ML-DSA. Po uvozu ključ vrne
GetPrivateMLDsaKey;HasPrivateKeyostanefalse. - Šifriranje. Brez
PbeParametersExportPfxs ključem PQ šifrira po PBES2: AES-256-CBC, PBKDF2 s HMAC-SHA-256 in 2048 ponovitvami, MAC s SHA-256. SPbeParametersveljajoAes128Cbc,Aes192CbcaliAes256Cbcs SHA-1, SHA-256, SHA-384 ali SHA-512 aliTripleDes3KeyPkcs12s SHA-1. Druge kombinacije metoda zavrne sCryptographicException. V .NET Framework knjižnicaPbeParametersinPbeEncryptionAlgorithmzagotovi sama, v imenskem prostoruSystem.Security.Cryptography. CryptoMode.Classic. BrezPbeParametersExportPfxzapiše natanko datoteko, ki jo zapišeExport(X509ContentType.Pfx, password)iz .NET, brez ključa PQ in s šifriranjem .NET.- Zaščitite geslo in datoteko. Datoteka je varna samo toliko kot njeno geslo. Uporabite dolgo naključno geslo, prenesite ga po drugi poti kot datoteko in datoteko po uvozu izbrišite.
- .NET 8 v sistemu Linux. Če potrdilo samo nosi ključ ML-DSA ali ML-KEM, torej ne RSA ali ECDSA, .NET 8 v sistemu Linux datoteke PFX ne prebere;
ImportPfxtam ne uspe sCryptographicExceptioniz .NET. Hibridnih potrdil to ne zadeva. Taka potrdila v sistemu Linux prenesite kot datoteko PEM in ključ dodelite z ustrezno metodo Attach.
Sorodne teme
sl/wiki/pqcrypt/lib/how-to/export-and-import-pfx.txt · Zuletzt geändert: von Wolfgang van der Stille