Substitua o certificado curinga em vários sites de uma vez (usando a linha de comando) no IIS 7.5

6

Eu tenho três websites: aaa.my-domain.com , bbb.my-domain.com e ccc.my-domain.com todos usando um único certificado curinga *.my-domain.com no IIS 7.5 Windows Server 2008R2 de 64 bits. Esse certificado expira em um mês e eu tenho um novo certificado curinga *.my-domain.com no meu servidor pronto.

Eu quero que todos esses domínios usem o novo certificado curinga sem tempo de inatividade perceptível.

Eu tentei o usual através da interface do usuário começando com a substituição do certificado para aaa.my-domain.com:

MasquandopressionoOK,recebooseguinteerro:

---------------------------EditSiteBinding---------------------------

AtleastoneothersiteisusingthesameHTTPSbindingandthebindingisconfiguredwithadifferentcertificate.AreyousurethatyouwanttoreusethisHTTPSbindingandreassigntheothersiteorsitestousethenewcertificate?

---------------------------YesNo---------------------------

QuandoclicoemYes,receboaseguintemensagem:

---------------------------EditSiteBinding---------------------------

Thecertificateassociatedwiththisbindingisalsoassignedtoanothersite'sbinding.EditingthisbindingwillcausetheHTTPSbindingoftheothersitetobeunusable.Doyoustillwanttocontinue?

---------------------------YesNo---------------------------

Estamensageminforma-mequeo link e o link ficará inutilizável. E eu vou ter tempo de inatividade para aqueles, pelo menos, até que eu termine de substituir o certificado para esses 2 domínios também, certo?

Eu estava pensando que deve haver uma maneira mais inteligente de fazer isso. Possivelmente através da linha de comando que substitui o certificado curinga por um novo para todos os sites de uma só vez. Não encontrei nenhum recurso on-line sobre como fazer isso. Alguma idéia?

Sites relacionados a curingas e ligações:

Sites relacionados a certificados de ligação da linha de comando:

por Chris 08.07.2014 / 08:59

1 resposta

9

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).

    
por 08.07.2014 / 17:08