Classe .NET Framework x509Certificate2, HasPrivateKey == true && PrivateKey == null?

Estou tentando trabalhar com um certificado X509 que foi originalmente importado para o keystore CurrentUser em um computador com Windows 10 usando o snap-in "Certificados" de um MMC. O mesmo procedimento foi testado em um computador com Windows 8.1 com o mesmo resultado.

Usando o módulo PKI padrão do PowerShell, estou obtendo um objeto X509Certificate2 usando Get-Item:

$my_cert = Get-Item Cert:\CurrentUser\My\ADAA82188A17THUMBPRINTXXXXXXXXXXX

A saída de$my_cert | fl * é o seguinte:

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

Então HasPrivateKey == True, mas PrivateKey == null. Eu tenho tentado descobrir como obter acesso à chave privada para executar criptografia e descriptografia. Os exemplos que vi online parecem indicar que a propriedade PrivateKey da classe X509Certificate2 deve estar prontamente disponível, mas aparentemente perdi algo.

Eu li perguntas semelhantes aqui, comoPrivateKey vazio em x509certificate2, mas nenhum parece resolver meu problema. Eu também liOito dicas para trabalhar com certificados X.509 no .NET por Paul Stovell, que foi muito esclarecedor, mas no fim das contas não ajudou. Isso me ajudou a verificar se a Chave Privada existe no local correto e, até onde eu sei, com as permissões corretas a serem referenciadas pela classe x509Certificate2:

C:\Users\My.Name\AppData\Roaming\Microsoft\SystemCertificates\My\Keys

O nome do arquivo da chave corresponde ao Identificador da Chave do Assunto no certificado.

Editar:

A saída decertutil -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.

Que informação "essencial" estou perdendo aqui? Por que a chave privada não é convenientemente referenciada no objeto X509Certificate2? Como obtenho acesso a ele?

questionAnswers(3)

yourAnswerToTheQuestion