O contexto da resposta é que o IIS 7 não se importa realmente com a ligação de certificado. O IIS 7 vincula apenas sites a um ou mais soquetes. Cada soquete é uma combinação de porta IP +. Fonte: IIS7 adiciona certificado ao site a partir da linha de comando
Então, o que queremos fazer é fazer uma nova vinculação de certificado na camada do sistema operacional. A camada do sistema operacional assume o controle da parte SSL, portanto, você usa netsh
para associar um certificado a um soquete específico. Isso é feito através de netsh
usando netsh http add sslcert
.
Quando ligamos um certificado (novo) a um soquete (ip + port), todos os sites que usam esse soquete usarão o novo certificado.
O comando para ligar um certificado a um socket é:
netsh http add sslcert ipport=10.100.0.12:443 certhash=1234567890123456789012345678901234567890 appid={12345678-1234-1234-1234-999999999999}
Como
Esta parte explica como proceder passo a passo. Ele pressupõe que você tenha alguns sites (aaa.my-domain.com, bbb.my-domain.com) executando um certificado * .my-domain.com que está prestes a expirar. Você já tem um novo certificado já instalado no servidor, mas ainda não aplicado aos sites do IIS .
Primeiro, precisamos descobrir duas coisas. A certhash do seu novo certificado e o appid.
-
certhash
Especifica o hash SHA do certificado. Esse hash tem 20 bytes de comprimento e é especificado como uma string hexadecimal. -
appid
Especifica o GUID para identificar o aplicativo proprietário, que é o próprio IIS.
Encontre o certhash
Execute o comando certutil
para obter todos os certificados na máquina:
certutil -store My
Eu não preciso de todas as informações, então eu faço:
certutil -store My | findstr /R "sha1 my-domain.com ===="
Entre os resultados, você deve encontrar seu novo certificado pronto em seu servidor:
================ Certificate 5 ================
Subject: CN=*.my-domain.com, OU=PositiveSSL Wildcard, OU=Domain Control Validated
Cert Hash(sha1): 12 34 56 78 90 12 34 56 78 90 12 34 56 78 90 12 34 56 78 90
1234567890123456789012345678901234567890
é o certhash
que procurávamos. é o Hash Cert (sha1) sem os espaços.
Encontre o appid
Vamos começar pelo olhando para todas as associações de socket de certificado :
netsh http show sslcert
Ou um soquete em particular
netsh http show sslcert ipport=10.100.0.12:443
Saída:
SSL Certificate bindings:
----------------------
IP:port : 10.100.0.12:443
Certificate Hash : 1111111111111111111111111111111111111111
Application ID : {12345678-1234-1234-1234-123456789012}
Certificate Store Name : MY
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout : 0
Ctl Identifier : (null)
Ctl Store Name : (null)
DS Mapper Usage : Disabled
Negotiate Client Certificate : Disabled
{12345678-1234-1234-1234-123456789012}
é o appid
que procurávamos. É o ID do aplicativo do próprio IIS. Aqui você vê que o soquete 10.100.0.12:443
ainda está vinculado ao certificado antigo (Hash 111111111 ...)
liga um certificado (novo) a um soquete
Abra um prompt de comando e execute-o como administrador. Se você não o executar como administrador, receberá um erro como: "A operação solicitada requer elevação (Executar como administrador)".
Primeiro, remova a ligação atual do socket de certificado usando este comando
netsh http delete sslcert ipport=10.100.0.12:443
Você deve receber:
SSL Certificate successfully deleted
Em seguida, use este comando (encontrado aqui ) para adicionar a nova ligação de socket de certificado com o appid e o certhash (sem espaços) que você encontrou anteriormente usando este comando
netsh http add sslcert ipport=10.100.0.12:443 certhash=1234567890123456789012345678901234567890 appid={12345678-1234-1234-1234-123456789012}
Você deve receber:
SSL Certificate successfully added
FEITO. Você acabou de substituir o certificado de todos os sites vinculados a essa porta IP + (soquete).