IIS7: não é possível definir o nome do host no site com certificado SSL e porta 443

47

Considere uma máquina Windows 2008 SP2 com o IIS7. A tarefa é aplicar um certificado e um nome de host ao primeiro site nesta máquina. Os cabeçalhos de host do site precisam serabc.123.example.com

A primeira etapa foi instalar o .pfx no Personal Store, que foi bem-sucedido.

O IIS7 encontra o certificado como disponível, mas não permite a entrada de um nome de host. A caixa de texto do nome do host está SEMPRE desativada / acinzentada, mesmo antes de selecionar meu certificado. Eu até apaguei a ligação padrão da porta 80.

Ligações do site

Pergunta: como posso definir um nome de host para este site? É uma questão de esse certificado ser um certificado curinga? Entendo que a solicitação SSL entra no servidor da Web e o cabeçalho do host no pacote é criptografado. Por que então o IIS6 permitiria que o cabeçalho do host fosse especificado, mas o IIS7 não?

Atualização: o certificado não faz parte do problema. Criei um novo site na máquina e, ao escolher a ligação https, a caixa de texto do nome do host é desativada.

p.campbell
fonte

Respostas:

32

Você não pode fazer isso a partir da interface do usuário, é necessário fazê-lo na linha de comando. Aqui está um bom passeio pelo processo:

http://www.sslshopper.com/article-ssl-host-headers-in-iis-7.html

joeqwerty
fonte
33
truque útil, dê um nome amigável ao certificado começando com '*' e o IIS não esmaecerá a
russau
1
Eu sei que isso é antigo, e é apenas um comentário, mas esse truque útil me salvou de alguma frustração. Obrigado!
precisa saber é o seguinte
45

Seu trabalha na GUI ...

Apenas verifique se o 'nome amigável' do certificado que você está instalando é o mesmo que o nome do domínio múltiplo que você criou para o certificado.

ie * .companydomain.com

se você colocar 'Nice friendly name' para * .companydoman.com cert, ao instalar o cert no IIS, ele ficará cinza na caixa de cabeçalho do nome do host.

Se você usar * .companyname.com como o nome amigável, será um sucesso.

Estrondo.

Lindsay Rex
fonte
14
Obrigado por esta dica! Caso alguém não consiga renomear um certificado do IIS (alguém pode?), Você poderá renomear o certificado no snap-in do MMC para Certificados. Basta carregar o MMC, adicionar o snap-in Certificados, selecionar Conta do computador, Computador local. Depois de carregar o snap-in Certificados, você pode navegar até Certificados (Computador Local)> Pessoal> Certificados e clicar com o botão direito do mouse para selecionar Propriedades no seu certificado. Altere o campo Nome amigável para * .yoursite.com e recarregue o snap-in do gerenciador do IIS
Garrett
4
O nome amigável parece apenas precisar começar com "*", mas pode conter qualquer outro nome que você deseje depois disso. No meu caso, eu tinha um certificado válido para vários domínios diferentes que não tinham uma raiz comum além de * .com e fornecendo isso como o nome amigável parecia estranho. Então, acabei chamando-o * -meu-descritivo-aqui-aqui. E obrigado @Garrett pela dica de renomeação!
Wojtow 07/10/2015
Esta é a verdadeira resposta. Agradável
Joe Phillips
@Garrett Isso significa que, se eu tiver usado um nome amigável como 'My Domain SSL', as coisas ainda funcionarão, mesmo que o campo do nome do host esteja em branco. Realmente me assustou quando perdi meus nomes de host, mas meus 4 subdomínios curinga parecem funcionar bem com o SSL reemitido? Usar claramente '* .mydomain.com' como um nome amigável apenas permite que você veja o nome do host, mas, sob o capô, as duas opções devem funcionar. Caso contrário, o IIS deverá nos dizer explicitamente para usar um nome de domínio qualificado e não um nome amigável?
Charles Robertson
10

A resposta curta é que cada IP pode ter apenas um certificado vinculado a ele; portanto, a ligação do certificado será aplicada, independentemente do nome do host direcionado para esse endereço IP. A capacidade de especificar um nome de host implica que você pode ter várias combinações de nome de host e certificado no mesmo endereço IP e porta (como é possível com entradas não SSL), mas esse não é o caso, portanto, o campo está indisponível.

A explicação mais completa é que o SSL criptografa seu tráfego e parte desse tráfego são os cabeçalhos HTTP enviados pelo navegador ao servidor. Um desses cabeçalhos seria o cabeçalho "Host" que o IIS usa para determinar qual site carregar com a solicitação. Como o certificado precisa ser carregado para estabelecer a conexão segura ANTES que os cabeçalhos da solicitação sejam enviados, o IIS precisa selecionar o certificado apenas com base no endereço IP e no número da porta, deixando o cabeçalho "Host" no frio como um fator para determinar qual site carregar, para que eles não permitam que você insira um.

Aqui está um artigo que descreve o funcionamento interno da conexão SSL com mais detalhes.

Justin Scott
fonte
Obrigado por esta resposta, Justin. Ainda não tenho certeza por que o IIS7 não me permite especificar um cabeçalho de host, mesmo quando escolho um dos endereços IP da lista. IIS6 faz sem problemas. Como mencionado, este é o único site na máquina.
p.campbell 23/12/2009
2
Os cabeçalhos do host podem trabalhar com um certificado curinga ou com um certificado "UC" de vários domínios: sslshopper.com/unified-communications-uc-ssl-certificates.html . Nesse caso, o servidor possui apenas 1 certificado para servir, mesmo que haja vários nomes de host.
russau
Explicação muito clara. 1
Dan Solovay
7

A resposta do SSLShopper não funcionou para mim porque deixou a ligação sem o cabeçalho do host e você não pôde removê-la sem interromper a conexão com o certificado. Aqui está o método que eu usei para fazê-lo funcionar:

Observe que esta resposta pressupõe que seu certificado já foi gerado, adicionado ao armazenamento de certificados e adicionado ao IIS. Ele também pressupõe que você não deseja outras ligações ao seu site, além do SSL.

Primeiro, precisamos coletar algumas informações. Precisamos do hash, do ID do aplicativo e do nome do host.

Passos

  1. Abra o IIS, selecione seu servidor e clique duas vezes em "Certificados do servidor" na seção inferior. Anote o endereço "Emitido para". Este é o nosso nome de host. Guarde isso.
  2. Selecione seu site
  3. Ligue o site à porta 80 usando o protocolo http
  4. Remova todas as outras ligações
  5. Ligue o site à porta 443 usando o protocolo https
  6. Abra um prompt de comando

    netsh http show sslcert
    
  7. Salve o hash do certificado e o ID do aplicativo

  8. Remova a ligação https no seu site
  9. No prompt de comando:

    netsh http add sslcert ipport=0.0.0.0:443 certstorename=my certhash=<put Certificate Hash here> appid={<put Application ID here>}
    
    appcmd set site /site.name:"<put site name here>" /+bindings.[protocol='https',bindingInformation='*:443:<put host name here>']
    

Nota: O Appcmd.exe pode ser encontrado em c: \ windows \ system32 \ insetsrv. Pode ser necessário estar nessa pasta para que este comando funcione.

  1. Remova a ligação http do seu site
Slogmeister Extraordinaire
fonte
Obrigado! Isso me ajudou a finalmente fazer meu site funcionar em HTTPS. Corrigi um erro de digitação em um dos comandos, mas tive que adicionar o cabeçalho Steps para ultrapassar os requisitos de comprimento mínimo. Sinta-se à vontade para removê-lo - sua resposta original é fácil de seguir. Felicidades!
potatopeelings
Isso funcionou para mim com um certificado com 6 SANs (não um certificado curinga) com uma ligeira variação porque eu tinha vários sites. Eu tive que executar as etapas 1 a 7 uma vez. O passo 8 precisava ser realizado em cada site. O primeiro comando da etapa 9 teve que ser executado uma vez e o segundo comando da etapa 9 teve que ser executado uma vez por site.
Steve Kaye
4

A resposta aceita aqui é confusa e não acho que seja correta para a pergunta. Não deve ser a resposta aceita.

O problema

Você tem um SSL curinga como *.ipsum.como certificado e está instalado, mas não pode escolher um nome de host para o site no IIS ao tentar adicionar uma ligação HTTPS porque a caixa de texto está acinzentada.

A solução

Seu SSL curinga pode ser usado com qualquer subdomínio, você só precisa se certificar que você comece o nome amigável do certificado com *. Prefiro usar o mesmo nome amigável que o domínio curinga, por exemplo, *.ipsum.commas você pode chamá-lo de qualquer coisa que seja do asterisco:*foo

Dei ao meu certificado o nome amigável errado, ajuda!

Desde o Windows 8 ou Server 2012, você pode digitar certlm.mscno menu Iniciar para gerenciar certificados para a máquina local. Nas versões anteriores do Windows, você precisará fazer algo um pouco mais complicado:

  1. Executar mmc.exedesde o início
  2. Vá para o Filemenu e escolha Add/Remove Snap-in...ou pressione(Ctrl-M)
  3. Destaque o Certificatessnap-in e clique em, em Add >seguida, escolha Computer Accountseguido pelas Local Computercaixas de diálogo subseqüentes e clique em Finishseguido por OKpara fechar a janela Snap-ins

Na janela principal, expanda Certificates (Local Computer)e, em Personalseguida, Certificatesclique com o botão direito do mouse no certificado, clique em Propertiesonde você pode atualizar o nome amigável.

Feche e abra o Gerenciador do IIS e você poderá definir seu nome de host.

Zac
fonte
1
Ele fez o truque!
Kreker
1
@Zac Awesome. Impressionante. Impressionante. Embora eu ache que não importa se o campo do nome do host estiver em branco, isso me deu mais tranquilidade. Lembre-se de que eu estava reemitindo meu certificado. Portanto, meu nome de host já estava no campo de nome de host antes de ficar em branco. Meu SSL curinga parecia funcionar com um nome amigável ou com o nome do tipo. * Mydomain.com. Eu acho que o IIS mantém um registro interno do nome do host, depois que o campo de nome do host fica em branco. Eu pensei que deveria mencionar isso, caso as pessoas estejam pirando!
Charles Robertson
1
@Zac Oh. E esta solução funciona em servidores dinossauros como o Windows 2008R2 ...
Charles Robertson
@CharlesRobertson muito feliz que isso tenha ajudado, e obrigado por adicionar essas informações suplementares!
Zac
2

Na verdade, você pode adicionar um cabeçalho de host via GUI, mas isso depende de como o certificado é nomeado ... se eu der um nome amigável de * .xyz.com ao meu certificado curinga e selecionar esse certificado, então eu vou capaz de usar o gui. se o nome amigável é algo como xyzwildcard, e eu escolho isso, ele esmaece o campo hostheader ...

Esquisito esquisito

tialen
fonte
1

Algumas máquinas não permitem editar o nome do host se o protocolo for alterado para https ou após a adição de um certificado SSL. Às vezes, o IIS pode ficar mal-humorado.

Este comando do Windows criará uma nova ligação com o protocolo "https", na porta "443", nome do host "subdomínio.domínio.com", nome do site "nome do site". Altere esses valores (entre aspas) para atender aos seus requisitos. Você precisará excluir a ligação antiga, se estiver usando a porta 443.

Run Windows Command Prompt as Administrator

C:>cd C:\Windows\System32\inetsrv

C: \ Windows \ System32 \ inetsrv>appcmd set site /site.name:"site_name" /+bindings.[protocol='https',bindingInformation='*:443:subdomain.domain.com']

MacGyver
fonte
0

O nome do host pode ser adicionado apenas quando o nome do nome do certificado selecionado for semelhante ao nome do host * .xyz.com e você pode renomear o nome amigável do certificado para * .xyz.com no mmc (Snap-in).

Umer Khan
fonte
-1

Eu acho que este artigo da KB lançará alguma luz sobre o problema. Em poucas palavras, os cabeçalhos de host HTTP 1.1 não são suportados quando você usa SSL.

O que provavelmente realizará o que você deseja é usar a chave da metabase SecureBindings. Por exemplo, cscript.exe adsutil.vbs define / w3svc / websiteID / SecureBindings "ip.ip.ip.ip: 443: abc.123.mysite.com

Jim B
fonte
Não se aplica ao IIS 7.
davidcl
isso é estranho, uma vez que funcionou quando fizemos ...
Jim B
-1

Por que a MS retira isso da GUI está além de mim, pois, se você tiver um aplicativo ASP.NET que utilize arquivos de licença (licx), seu site não funcionará porque aparece como um endereço IP em vez de um nome de domínio . Eles precisam PARAR DE ASSUMIR a cada nova versão de seu software - as pessoas de TI não precisam ser cuidadas pela Microsoft! Nossa!


fonte
-2
  1. Criei um certificado autoassinado com * .testcompany.com, selecionei o recém-criado (começando com *) na lista suspensa Editar certificado SSL de ligação, habilitei a caixa de texto do nome do host, criei o nome do host como 'webapi.b2c .com ',

  2. Atualizei o arquivo hosts em C: \ Windows \ System32 \ drivers \ etc 127.0.0.1 webapi.b2c.com

Agora posso navegar no site como ' https://webapp.b2c.com/ '

Sivalingaamorthy
fonte