MMCの「証明書」スナップインを使用してWindows 10コンピュータ上のCurrentUserキーストアに最初にインポートされたX509証明書で作業しようとしています。同じ手順を同じ結果を持つWindows 8.1コンピュータでテストしました。標準のPowerShell PKIモジュールを使用して.NET Framework x509Certificate2クラス、HasPrivateKey == true && PrivateKey == null?
、私が取得-項目を使用してX509Certificate2オブジェクトを取得しています:以下のように
$my_cert = Get-Item Cert:\CurrentUser\My\ADAA82188A17THUMBPRINTXXXXXXXXXXX
$my_cert | fl *
の出力は次のようになります。
PSPath : Microsoft.PowerShell.Security\Certificate::CurrentUser\My\XXXXXXXXXXXXXXXXXXX
PSParentPath : Microsoft.PowerShell.Security\Certificate::CurrentUser\My
PSChildName : XXXXXXXXXXXXXXXXXXX
PSDrive : Cert
PSProvider : Microsoft.PowerShell.Security\Certificate
PSIsContainer : False
EnhancedKeyUsageList : {Secure Email (1.3.6.1.5.5.7.3.4), IP security user (1.3.6.1.5.5.7.3.7), Encrypting File
System (1.3.6.1.4.1.311.10.3.4), Document Signing (1.3.6.1.4.1.311.10.3.12)...}
DnsNameList : {My Name}
SendAsTrustedIssuer : False
EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId : {D52C406F-C279-4BF2-B7C2-EE704290DB3E}
Archived : False
Extensions : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid,
System.Security.Cryptography.Oid, System.Security.Cryptography.Oid...}
FriendlyName :
IssuerName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter : 4/15/2017 2:15:16 PM
NotBefore : 4/15/2016 2:15:16 PM
HasPrivateKey : True
PrivateKey :
PublicKey : System.Security.Cryptography.X509Certificates.PublicKey
RawData : {56, 130, 19, 252...}
SerialNumber : 4F0000002F700000000000000000000000
SubjectName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm : System.Security.Cryptography.Oid
Thumbprint : XXXXXXXXXXXXXXXXXXX
Version : 3
Handle : 2241663016272
Issuer : CN=Issuing CA, DC=My, DC=Domain, DC=us
Subject : [email protected], CN=My Name
のでHasPrivateKey ==真ただし、PrivateKey == null私は秘密鍵にアクセスして暗号化と復号化を行う方法を理解しようとしています。すべて私がオンラインで見た例は、X509Certificate2クラスのPrivateKeyプロパティがすぐに利用できるはずであることを示しているようですが、明らかに私は何かを見逃しました。
Empty PrivateKey in x509certificate2など、私はここで同様の質問をお読みになりましたが、問題が解決しないようです。私も非常に啓発されていたPaul StovellのEight tips for working with X.509 certificates in .NETを読んだが、最終的には役に立たなかった。正しい権限がx509Certificate2クラスによって参照されるとそれは、私には秘密鍵が私の知る限り、正しい場所に存在していることを確認するのに役立ちました:
C:\Users\My.Name\AppData\Roaming\Microsoft\SystemCertificates\My\Keys
キーファイルの名前はに一致します証明書のSubject Key Identifier。
編集:
certutil -user -store my "Serial Number"
の出力がある:どのような "キー" の情報の一部は、私がここで行方不明です
Serial Number: 4f000000xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Issuer: CN=Issuing CA, DC=My, DC=Domain, DC=us
NotBefore: 4/15/2016 2:15 PM
NotAfter: 4/15/2017 2:15 PM
Subject: [email protected], CN=My Name
Non-root Certificate
Template: Userv1, User v1
Cert Hash(sha1): ad ab 82 18 8a 17 4d 75 11 04 48 7c 43 43 d4 05 b9 74 c8 4c
Key Container = te-Userv1-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Unique container name: fcbba1aa0xxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Provider = Microsoft Software Key Storage Provider
Encryption test passed
CertUtil: -store command completed successfully.
?秘密キーがX509Certificate2オブジェクトから便利に参照されないのはなぜですか?どうすればそれにアクセスできますか?
'$ my_cert.get_PrivateKeyを()'試してみてください。い – PetSerAl
@PetSerAl、例外があります - 「無効なプロバイダータイプが指定されています」 –