Windows如何计算导出到PFX文件的证书的别名?

knsnq2tg  于 2023-03-09  发布在  Windows
关注(0)|答案(1)|浏览(180)

我有一个应用程序,它导入一个存储在PFX文件中的证书,并要求用户提供唯一要导入的证书的别名。有些用户使用Windows证书存储维护他们的证书,并将它们从那里导出到PFX文件中,最后希望将这些文件上传到我的应用程序中。证书可以使用certmgr.msc或例如手动导出。使用一些Powershell脚本使用Export-PfxCertificate
问题是,两种方式生成的别名似乎都是不可预测的GUID或其他东西。尽管如此,当一遍又一遍地导出同一个证书时,别名是稳定的,似乎根本没有变化。OTOH,在证书存储中应用一些别名并使用它导出似乎并不那么容易,Windows仍然会生成一些看起来像GUID的东西。此外,我没有看到Export-PfxCertificate的任何参数来指定自定义别名。

C:\Users\tschoening>keytool -v -list -storetype pkcs12 -keystore Desktop\tschoening_ps.pfx
Keystore-Kennwort eingeben:
Keystore-Typ: PKCS12
Keystore-Provider: SUN

Keystore enthält 1 Eintrag

Aliasname: 2fb763d2-f1fa-4820-8caf-f73e011ee4d1

对于不同的测试证书,别名甚至看起来略有不同:

Aliasname: {a16a26b0-7d2e-4366-95b9-40f06b45b578}

certutil提供类似的输出:

C:\Users\tschoening>certutil -v -dumpPFX Desktop\tschoening.pfx
[...]
  Attribut[1]: 1.2.840.113549.1.9.20 (szOID_PKCS_12_FRIENDLY_NAME_ATTR)
    Wert [1][0], Länge = 4a
    CryptFormatObject: Keine integrierte Formatierungshilfe
    2fb763d2-f1fa-4820-8caf-f73e011ee4d1
    0000  1e 48 00 32 00 66 00 62  00 37 00 36 00 33 00 64   .H.2.f.b.7.6.3.d
    0010  00 32 00 2d 00 66 00 31  00 66 00 61 00 2d 00 34   .2.-.f.1.f.a.-.4
    0020  00 38 00 32 00 30 00 2d  00 38 00 63 00 61 00 66   .8.2.0.-.8.c.a.f
    0030  00 2d 00 66 00 37 00 33  00 65 00 30 00 31 00 31   .-.f.7.3.e.0.1.1
    0040  00 65 00 65 00 34 00 64  00 31                     .e.e.4.d.1
0000: 1e 48                                     ; UNICODE_STRING (48 Bytes)
0002:    00 32 00 66 00 62 00 37  00 36 00 33 00 64 00 32  ; .2.f.b.7.6.3.d.2
0012:    00 2d 00 66 00 31 00 66  00 61 00 2d 00 34 00 38  ; .-.f.1.f.a.-.4.8
0022:    00 32 00 30 00 2d 00 38  00 63 00 61 00 66 00 2d  ; .2.0.-.8.c.a.f.-
0032:    00 66 00 37 00 33 00 65  00 30 00 31 00 31 00 65  ; .f.7.3.e.0.1.1.e
0042:    00 65 00 34 00 64 00 31                           ; .e.4.d.1
            ; "2fb763d2-f1fa-4820-8caf-f73e011ee4d1"

那么,Windows是如何计算该别名的呢?是否有办法在导出过程中提供自定义别名?

djmepvbi

djmepvbi1#

别名由密钥的唯一标识符生成:

$CertObject = Get-ChildItem .\13CEF3D48F1287173401CE1B189C161F46585F1F
$rsaCert = [System.Security.Cryptography.X509Certificates.RSACertificateExtensions]::GetRSAPrivateKey($CertObject)
$rsaCert.key.KeyName
{6E9844BC-51A1-408E-A421-2D53B253C8B4}

显然,这些值对您来说是不同的。
据我所知,改变它的唯一方法是使用一些第三方工具,如OpenSSL。

相关问题