Quando configuramos um certificado dentro de uma aplicação IIS, é necessário concedermos direitos de leitura a chave privada do certificado em questão para as contas dos worker process do IIS. Via Alexander Strauss eu encontrei a forma de fazer isso:
-
Através do utilitário FindPrivateKey, conseguimos identificar a chave privada, para que seja possível encontrá-la e, em seguida, conceder os direitos a mesma. Se não tiver o Microsoft SDK for .NET Framework 3.0 instalado, então voce pode baixar os exemplos de WCF da Microsoft que, dentro dele, existe um projeto chamado FindPrivateKey.sln, que é justamente o projeto que gera esse utilitário.
-
Depois de encontrado a chave, voce pode conceder os direitos através do utilitário cacls.exe (como é mostrado no post do Alexander) ou via Windows Explorer >> Security.
Geralmente, alguns possíveis erros que podem acontecer quando voce executa um serviço WCF e o worker process não tem permissão de leitura a uma determinada chave privada. Pude detectar dois deles:
- System.ArgumentException was unhandled Message=”The certificate ‘CN=Chave’ must have a private key that is capable of key exchange. The process must have access rights for the private key.” Source=”System.ServiceModel”
- CryptographicException: Keyset does not exist
É importante lembrar que se voce alterar as contas padrões no IIS para o worker process, é necessário conceder o direito de leitura a chave privada do certificado para o usuário ali determinado.