Se você deseja aprender como gerar uma solicitação de certificado IIS, você está no lugar certo. Neste artigo, vou abordar como fiz isso com o PowerShell e também como vincular um certificado a um site IIS.
Vamos esclarecer uma coisa. Eu odeio criptografia e certificados. Ao longo da minha carreira, em algumas ocasiões, fui o cara do “certificado” . No entanto, era apenas mais um chapéu para um administrador de sistema.
I never got to the point where I completely understood the technology and it seemed like every task I tried to accomplish around that area seemed to never work out. It’s definitely an unforgiving technology for sure.
Deixe-me contar uma história sobre automatizar a instalação de um certificado em um servidor IIS com o PowerShell.
A Missão
A partir de um cliente, solicitar um novo certificado público Digicert, instalá-lo em um servidor remoto Windows Server 2012 R2 Core executando o IIS 8.5 em um grupo de trabalho, configurar um vínculo SSL para um site e usar o certificado instalado para o vínculo. Simples, certo? Risos!
Como é Feito, Filho!
Em resumo, são necessários X passos para fazer isso acontecer.
- Gerar uma solicitação de assinatura de certificado IIS no computador onde o certificado será instalado. No meu caso, eu só tinha acesso WinRM, então tive que executar certreq.exe no servidor remoto usando
Invoke-Command
e enviar o conteúdo do CSR para um arquivo local. - Obtenha o CSR assinado por uma AC pública. (Nenhuma ajuda aqui – um certificado bonitinho acabou de voltar da segurança com a qual trabalhei). No meu caso, a equipe de segurança me devolveu uma coleção P7B de certificados agrupados em um arquivo .CER que incluía o certificado que eu estava procurando, bem como os certificados intermediários. Isso exigiu um pouco de ajuste para funcionar.
- Complete a solicitação de assinatura de certificado no computador onde o certificado será instalado. Isso colocará o certificado no repositório de certificados.
- Crie uma associação web SSL IIS no servidor.
- Associe o certificado à associação web.
Gerando a Solicitação de Certificado do IIS
Sua primeira tarefa será executar certreq.exe com este script do PowerShell para IIS no servidor remoto para reunir um arquivo de solicitação. Para fazer isso, certreq.exe requer um arquivo INF como entrada. Este arquivo é usado para todas as várias opções que seu certificado acabará tendo. Sem entrar em muitos detalhes, esta é uma cópia do arquivo INF que eu estava usando.
Você verá na função New-CertificateSigningRequest
que eu facilito muito a personalização disso para você. Na verdade, se você usar minhas funções, nunca verá esse arquivo, pois ele é necessário apenas temporariamente para criar o CSR (arquivo de solicitação).
Em seguida, você precisará obter este arquivo INF no servidor remoto e executar certreq.exe com os seguintes parâmetros como certreq.exe -new "$InfFilePath" "$reqFilePath"
.
Isso vai gerar um CSR (arquivo de solicitação) no computador remoto. Em seguida, você precisará enviar este arquivo para sua equipe de segurança. Isso também criará um certificado contendo tanto a chave privada quanto a chave pública no contexto Solicitações Emitidas de Certificado no contexto da máquina local.

Conclusão da Solicitação de Certificado IIS
No meu caso, recebi de volta um único arquivo CER. Criei uma função neste script PowerShell do IIS para importá-lo diretamente para a loja Pessoal no contexto da máquina local, apenas para descobrir que o IIS não conseguia visualizá-lo. O motivo era que o certificado precisava conter a chave privada também. Simplesmente importar o certificado para a loja Pessoal não funcionaria. Eu tive que completar a solicitação de certificado usando certreq.exe.
Para fazer isso, você precisará copiar o certificado que recebeu de sua equipe de segurança para o servidor remoto e depois executar certreq.exe assim certreq.exe -accept -machine "C:\issuedcert.cer"
.
Você sempre precisará garantir que o certificado de resposta sempre vá para o contexto da máquina local usando o parâmetro -machine
. Isso deve ser concluído com sucesso de acordo com tudo o que li, mas definitivamente não foi o caso para mim. Por algum motivo, eu estava recebendo um erro que se parecia com isto:

Parece que isso significa que a chave pública no arquivo de solicitação não correspondia ao que foi retornado pela equipe de segurança. Para testar isso, simplesmente execute certutil.exe -dump requestfile.req
e certutil -dumpissuedcert.cer
. Role para baixo na saída até encontrar a área da chave pública.

Copie cada uma dessas chaves privadas e compare em um editor de texto para garantir que sejam iguais. Se não forem, entre em contato com sua equipe de segurança por não assinar corretamente sua solicitação!
Se essas coincidirem, está tudo certo e você não deverá receber esse erro.
Crie a Vinculação SSL
No servidor remoto, execute:
Anexe o Certificado à Vinculação SSL
No servidor remoto, execute:
Obtenha o Script PowerShell para IIS
Se tudo correr bem, você deverá estar pronto! Agora, se precisar de um pouco de ajuda para fazer isso, criei três funções para tornar isso muito mais fácil. Vá até meu repositório no Github para obter as funções:
https://github.com/adbertram/Random-PowerShell-Work/tree/master/Certificates
https://github.com/adbertram/Random-PowerShell-Work/tree/master/IIS
Código de exemplo
Leitura relacionada
Não deixe de conferir outras postagens no blog ATA sobre o gerenciamento do IIS com o PowerShell
Source:
https://adamtheautomator.com/iis-certificate-request/