Como posso aceder a uma chave privada com a conta de usuário ASPNET?
-
03-07-2019 - |
Pergunta
Eu estou tendo alguns problemas para a importação e acessar a chave privada com o usuário ASPNET. Eu sei que quando uma importação uma chave privada (ficheiro.pfx) manualmente, no Windows, você tem a opção de marcar a chave como exportável. Agora, tanto quanto eu posso dizer, isso é necessária a fim de recuperar a chave privada mais tarde.
Meu problema vem em que eu estou importando a chave privada no código, como o usuário ASPNET, e não parece ser uma maneira de marcá-lo como exportável, da mesma forma que o assistente de importação de certificados do Windows faz. Para esclarecer, a importação funciona muito bem, mas quando eu acessar os detalhes do certificado, agora importado, não há dados chave privada.
Este é o código que estou usando para importar o certificado, uma vez que já abriu o arquivo .pfx, com a senha correta.
public void ImportCertificate(X509Certificate2 cert, StoreName name, StoreLocation loc)
{
X509Store certStore = new X509Store(name, loc);
StorePermission permission = new StorePermission(PermissionState.Unrestricted);
permission.Flags = StorePermissionFlags.AddToStore;
permission.Assert();
certStore.Open(OpenFlags.ReadWrite);
certStore.Add(cert);
certStore.Close();
}
Am I zoneando as permissões ou a maneira que eu importar esta chave privada? Ou eu estou lidando com isso da maneira errada inteiramente?
Solução
Eu acredito que você precisa para definir o sinalizador X509KeyStorageFlags.Exportable quando você importar o certificado. Você não mostra esse código, mas há uma sobrecarga do método de importação com esta assinatura:
public override void Import(string fileName, string password,
X509KeyStorageFlags keyStorageFlags);
ou este:
public override void Import(byte[] rawData, string password,
X509KeyStorageFlags keyStorageFlags);
O que vai deixar você configurá-lo antes de importar. Caso contrário, tudo parece bom!
Richard