Como configurar o SSL no IIS 7 ou em versões mais recentes

por Saad Ladki

Introdução

As etapas de configuração do protocolo SSL para um site são as mesmas no IIS 6.0, no IIS 7 e em versões mais recentes e incluem o seguinte:

  • Obtenha um certificado apropriado.
  • Crie uma associação HTTPS em um site.
  • Faça um teste realizando uma solicitação para o site.
  • Também é possível configurar as opções de SSL, tornando o SSL um requisito.

Este documento fornece algumas informações básicas sobre o SSL e mostra como ativá-lo usando os seguintes recursos:

  • O Gerenciador do IIS.
  • A ferramenta de linha de comando AppCmd.exe.
  • O Microsoft.Web.Administration, de modo programático.
  • Scripts de WMI.

Este artigo inclui as seções a seguir:

Configuração de SSL

É extremamente importante e comum usar o SSL para proteger sites, sejam eles executados em um servidor próprio ou na nuvem, a fim de proteger a privacidade dos usuários. Se você precisa configurar o SSL no seu servidor, é importante notar que a implementação dele mudou do IIS 6.0 para o IIS 7 e as versões mais recentes. No IIS 6.0 no Windows Server 2003, toda a configuração do SSL era armazenada na metabase do IIS e a criptografia/descriptografia ocorria no modo de usuário, exigindo muitas transições entre os modos kernel e de usuário. No IIS 7 e nas versões mais recentes, HTTP.sys lida com a criptografia/descriptografia do SSL no modo kernel, o que resulta em desempenho até 20% melhor para conexões seguras no IIS 7 e em desempenho superior ao padrão no IIS 6.0.

Para usar o SSL no modo kernel, você precisa armazenar as informações de associação SSL em dois locais. Primeiro, ela deve ser armazenada no %windir%\System32\inetsrv\config\applicationHost.config do site. Quando o site é iniciado, o IIS envia a associação ao HTTP.sys e ele começa a escutar solicitações no IP e na porta especificados, o que funciona para todas as associações. Em seguida, a configuração do SSL vinculada à associação deve ser armazenada na configuração do HTTP.sys. Use o comando netsh em um prompt de comando para exibir a configuração de associação SSL armazenada em HTTP.sys, como neste exemplo:

netsh http show sslcert

Quando um cliente se conecta e inicia uma negociação de SSL, o HTTP.sys procura na configuração do SSL o par IP/porta conectado a ele. Para que a negociação de SSL ocorra, a configuração do SSL no HTTP.sys deve incluir um hash de certificado e o nome do repositório de certificados.

Dica de solução de problemas: em caso de problemas com uma associação SSL, verifique se ela está configurada em ApplicationHost.config e se o repositório de HTTP.sys contém um hash de certificado e um nome de repositório válidos relacionados a ela.

Como escolher um certificado

Considere o seguinte ao escolher um certificado: você deseja que os usuários finais possam verificar a identidade do servidor com ele? Em caso afirmativo, crie uma solicitação de certificado e a envie a uma AC (autoridade de certificação) conhecida, como o VeriSign ou o GeoTrust, ou consiga um certificado com uma AC online no seu domínio de intranet. Em geral, um navegador verifica as três seguintes informações em um certificado do servidor:

  1. A data e hora atuais estão dentro do intervalo de datas "Válido de" e "Válido até" no certificado.
  2. o "Common Name" (CN) do certificado corresponde ao cabeçalho de host na solicitação. Por exemplo, se o cliente estiver fazendo uma solicitação para https://www.contoso.com/, o CN deverá ser www.contoso.com.
  3. Se o emissor do certificado é uma AC conhecida e confiável.

Quando uma ou mais dessas verificações falham, o navegador avisa o usuário. No caso de sites da Internet ou da intranet em que os usuários finais não são pessoas que você conhece pessoalmente, é importante sempre garantir a validade desses três parâmetros.

Certificados autoassinados são aqueles criados no seu computador. Eles são úteis em ambientes em que o usuário final não precisa confiar no servidor, como em um ambiente de teste.

Como usar o AppCmd

Não é possível solicitar ou criar um certificado usando o AppCmd.exe. Também não é possível usá-lo para criar uma associação SSL.

Definir as configurações do SSL

É possível usar o AppCmd.exe para modificar o atributo sslFlags na seção “Acesso” de um site a fim de configurá-lo para aceitar apenas conexões HTTPS do servidor. Por exemplo, você pode definir essa configuração para o "Site Padrão" no arquivo ApplicationHost.config (por exemplo, commitPath:APPHOST) com o seguinte comando:

%windir%\system32\inetsrv>AppCmd set config "Default Web Site" -commitPath:APPHOST -section:access -sslFlags:Ssl

Se o comando for executado corretamente, a seguinte mensagem será exibida:

Applied configuration changes to section "system.webServer/security/access" for "MACHINE/WEBROOT/APPHOST/Default Web Site" at configuration commit path "MACHINE/WEBROOT/APPHOST"

Observação

Para exigir o SSL de 128 bits, altere o valor de sslFlags para Ssl128.

O exemplo a seguir mostra como exibir as configurações da seção <access/> para o “Site Padrão”. O atributo sslFlags foi definido corretamente.

%windir%\system32\inetsrv>AppCmd list config "Default Web Site" -section:access

A execução do comando resulta na seguinte entrada no arquivo ApplicationHost.config:

<system.webServer>
  <security>
    <access flags="Script, Read" sslFlags="Ssl" />
  </security>
</system.webServer>

Como usar o WMI

Não é possível solicitar ou criar um certificado usando o namespace de WMI WebAdministration.

Criar uma associação SSL

O seguinte script mostra como criar uma associação SSL e como adicionar a configuração apropriada para o HTTP.sys e o IIS:

Set oIIS = GetObject("winmgmts:root\WebAdministration")
'''''''''''''''''''''''''''''''''''''''''''''
' CREATE SSL BINDING
'''''''''''''''''''''''''''''''''''''''''''''

oIIS.Get("SSLBinding").Create _ 
   "*", 443, "4dc67e0ca1d9ac7dd4efb3daaeb15d708c9184f8", "MY"
'''''''''''''''''''''''''''''''''''''''''''''
' ADD SSL BINDING TO SITE
'''''''''''''''''''''''''''''''''''''''''''''

Set oBinding = oIIS.Get("BindingElement").SpawnInstance_
oBinding.BindingInformation = "*:443:"
oBinding.Protocol = "https"

Set oSite = oIIS.Get("Site.Name='Default Web Site'")
arrBindings = oSite.Bindings

ReDim Preserve arrBindings(UBound(arrBindings) + 1)
Set arrBindings(UBound(arrBindings)) = oBinding

oSite.Bindings = arrBindings
Set oPath = oSite.Put_

Observação

O hash de certificado e o repositório devem fazer referência a um certificado real e funcional no servidor. Se o hash do certificado e/ou o nome do repositório forem inválidos, um erro será retornado.

Definir as configurações do SSL

O script a seguir mostra como definir as configurações do SSL usando o provedor WMI do IIS. É possível encontrar esse valor no arquivo IIS_Schema.xml.

CONST SSL = 8  
Set oIIS = GetObject("winmgmts:root\WebAdministration")  
Set oSection = oIIS.Get(\_  
 "AccessSection.Path='MACHINE/WEBROOT/APPHOST',Location='Default Web Site'")  
oSection.SslFlags = oSection.SslFlags OR SSL  
oSection.Put\_ <a id="IISManager"></a>

Gerenciador do IIS

obter um certificado

Selecione o nó de servidor no modo de exibição de árvore e clique duas vezes no recurso Certificados do servidor no modo de exibição de lista:
Screenshot of the ALEXIS E 3 L H server node Home with Server Certificates selected.

No painel Ações, clique em Criar certificado autoassinado....
Screenshot of the Server Certificates Actions pane with Create SelfSigned Certificate emphasized.

Insira um nome amigável para o novo certificado e clique em OK.

Agora você tem um certificado autoassinado. Ele é marcado para uso na "Autenticação do servidor", o que significa que ele é usado como um certificado do servidor para a criptografia SSL HTTP e para a autenticação da identidade do servidor.

Criar uma associação SSL

Selecione um site no modo de exibição de árvore e clique em Associações... no painel Ações. O editor de associações é aberto e permite criar, editar e excluir as associações do site. Clique em Adicionar... para adicionar a nova associação SSL ao site.

Screenshot of the Site Bindings dialog with one the default site binding.

As configurações padrão de uma nova associação são definidas como HTTP na porta 80. Selecione HTTPS na lista de seleção Tipo. Selecione o certificado autoassinado que você criou na seção anterior na lista suspensa Certificado SSL e clique em OK.

Screenshot of the Add Site Binding dialog with Type set to H T T P S and S S L certificate set to Test certificate.

Agora você tem uma nova associação SSL no site e basta apenas verificar se ela funciona.
Screenshot of the Site Binding dialog with both the H T T P and H T T P S bindings.

Verificar a associação SSL

No painel Ações, em “Procurar site”, clique no link vinculado à associação que você acabou de criar.
Screenshot of the Browse Web Site section of the Actions pane with Browse asterisk colon 443 or H T T P S emphasized.

O IE (Internet Explorer) 7 e as versões mais recentes exibem uma página de erro porque o certificado autoassinado foi emitido pelo seu computador, não por uma AC (autoridade de certificação) confiável. Eles confiam no certificado quando ele é adicionado à lista de Autoridades de Certificação Raiz Confiáveis no repositório de certificados do computador local ou na Política de Grupo do domínio. Clique em Continuar neste site (não recomendado).
Screenshot of internet explorer displaying a security certificate error. Continue to this website (not recommended) is emphasized.

Definir as configurações do SSL

Defina as configurações do SSL para que o site exija SSL ou interaja de maneira específica com os certificados de cliente. Clique no nó do site no modo de exibição de árvore para voltar à página inicial do site. Clique duas vezes no recurso Configurações de SSL no painel central.

Screenshot of the S S L Settings pane requiring S S L and ignoring Client certificates.

Resumo

Ao seguir as etapas deste documento, você usou a ferramenta de linha de comando AppCmd.exe, o WMI do provedor de scripts e o Gerenciador do IIS para configurar o SSL no IIS.