Partilhar via


Exemplo de FindPrivateKey

Pode ser difícil encontrar o local e o nome do arquivo de chave privada associado a um certificado X.509 específico no armazenamento de certificados. A ferramenta FindPrivateKey.exe facilita esse processo.

Importante

Você deve criar o exemplo FindPrivateKey antes de usá-lo.

Os certificados X.509 são instalados por um Administrador ou qualquer utilizador na máquina. No entanto, o certificado pode ser acessado por um serviço executado em uma conta diferente. Por exemplo, a conta NETWORK SERVICE.

Essa conta pode não ter acesso ao arquivo de chave privada porque o certificado não foi instalado por ela originalmente. A ferramenta FindPrivateKey fornece a localização do arquivo de chave privada de um determinado certificado X.509. Você pode adicionar permissões ou remover permissões a esse arquivo assim que souber o local do arquivo de chave privada dos certificados X.509 específicos.

Os exemplos que usam certificados para segurança usam a ferramenta FindPrivateKey no arquivo Setup.bat . Depois que o arquivo de chave privada for encontrado, você poderá usar outras ferramentas, como Cacls.exe , para definir os direitos de acesso apropriados no arquivo.

Ao executar um serviço WCF (Windows Communication Foundation) em uma conta de usuário, como um executável auto-hospedado, verifique se a conta de usuário tem acesso somente leitura ao arquivo. Ao executar um serviço WCF em Serviços de Informações da Internet (IIS), as contas padrão em que o serviço é executado são o SERVIÇO DE REDE no IIS 7 e versões anteriores ou a Identidade do Pool de Aplicativos no IIS 7.5 e versões posteriores. Para obter mais informações, consulte Identidades do pool de aplicativos.

Privilégios de leitura

Ao acessar um certificado para o qual o processo não tem privilégio de leitura, você verá uma mensagem de exceção semelhante ao exemplo a seguir:

System.ArgumentException was unhandled
Message="The certificate 'CN=localhost' must have a private key that is capable of key exchange. The process must have access rights for the private key."
Source="System.ServiceModel"

Quando isso ocorrer, use a ferramenta FindPrivateKey para localizar o arquivo de chave privada e, em seguida, defina o direito de acesso para o processo no qual o serviço está sendo executado. Por exemplo, isso pode ser feito com a ferramenta Cacls.exe, conforme mostrado no exemplo a seguir:

cacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\8aeda5eb81555f14f8f9960745b5a40d_38f7de48-5ee9-452d-8a5a-92789d7110b1" /E /G "NETWORK SERVICE":R

Convenções — entradas de linha de comando

"[option]" representa um conjunto opcional de parâmetros.

"{option}" representa um conjunto obrigatório de parâmetros.

"opção1 | opção2" representa uma escolha entre conjuntos de opções.

"<value>" representa um valor de parâmetro a ser inserido.

Utilização

FindPrivateKey <storeName> <storeLocation> [{ {-n <subjectName>} | {-t <thumbprint>} } [-f | -d | -a]]

Em que:

Parâmetro Description
<subjectName> O nome do assunto do certificado
<thumbprint> A impressão digital do certificado (Você pode usar a ferramenta Certmgr.exe para encontrar isso)
-f Somente nome do arquivo de saída
-d Somente diretório de saída
-a nome absoluto do arquivo de saída

Se nenhum parâmetro for especificado no prompt de comando, o texto de ajuda com essas informações será exibido.

Exemplos

Este exemplo localiza o nome do arquivo do certificado com um nome de assunto "CN=localhost", no repositório pessoal do Usuário Atual.

FindPrivateKey My CurrentUser -n "CN=localhost"

Este exemplo localiza o nome do arquivo do certificado com um nome de assunto "CN=localhost", no repositório pessoal do Usuário Atual e gera o caminho completo do diretório.

FindPrivateKey My CurrentUser -n "CN=localhost" -a

Este exemplo localiza o nome do arquivo do certificado com uma impressão digital de "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52", no repositório pessoal do computador local.

FindPrivateKey My LocalMachine -t "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52"