Compartilhar via


Associação <binding>

Visão geral

O elemento <binding> do elemento de <bindings> permite configurar as informações necessárias para que as solicitações se comuniquem com um site.

Configure as informações de associação ao criar um site ou editar as informações de associação depois de criar o site. As informações de associação incluem o protocolo que os clientes usam para se comunicar com o site, o endereço IP do site, o número da porta e um cabeçalho de host.

O elemento <binding> contém dois atributos para configurar as informações de associação: bindingInformation e protocolo. O atributo bindingInformation contém o endereço IP, o número da porta e, opcionalmente, o cabeçalho do host do site. O atributo de protocolo define o protocolo a ser usado para se comunicar com o site.

Você pode configurar a coleção de associações para um site usando o Gerenciador do IIS selecionando o site e usando os links Associações... ou Configurações Avançadas... no painel Ações ou clicando em Editar Associações... no menu de atalho do site.

O IIS 8.0 ou posterior permite que você forneça segurança para sites da Web usando os certificados em um repositório centralizado de certificados no Windows Server 2012. Para obter mais informações, consulte Suporte ao Certificado SSL Centralizado do IIS 8.0: Escalabilidade e Capacidade de Gerenciamento do SSL.

O elemento binding permite especificar o tipo de associação usado para certificados do protocolo SSL.

Compatibilidade

Versão Observações
IIS 10.0 O elemento <binding> não foi modificado no IIS 10.0.
IIS 8.5 O elemento <binding> não foi modificado no IIS 8.5.
IIS 8.0 O atributo sslFlags foi adicionado para especificar a associação usada para certificados do protocolo SSL.
IIS 7.5 O elemento <binding> não foi modificado no IIS 7.5.
IIS 7.0 O elemento <binding> da coleção <bindings> foi introduzido no IIS 7.0.
IIS 6,0 A coleção <bindings> substitui seções da propriedade ServerBindings no objeto de metabase IIsWebServer do IIS 6.0.

Instalação

O elemento <binding> está incluído na instalação padrão do IIS 7 e versões posteriores.

Como instalar um repositório centralizado de certificados

No IIS 8 e posterior, os certificados em um repositório centralizado de certificados podem ser usados para fornecer segurança para um site da Web. Para usar esse repositório no servidor Web Windows Server 2012 ou posterior, você deve instalar a função de repositório centralizado de certificados SSL. Para fazer isso com o IIS já instalado, prossiga da seguinte maneira:

  1. Pressione a tecla Windows e clique em Gerenciador do Servidor.
  2. No Gerenciador do Servidor, clique em Gerenciar e depois em Adicionar Funções e Recursos.
  3. No assistente Adicionar Funções e Recursos, clique na página Antes de Começar, selecione o tipo de instalação, clique em Avançar na página Tipo de Instalação, selecione onde instalar e clique em Avançar nas páginas Seleção do Servidor.
  4. Na página Funções do Servidor, verifique se o Servidor Web (IIS) está selecionado e expanda-o. Expanda Servidor Web e, em seguida, selecione e expanda Segurança.
  5. Selecione Repositório de Certificados SSL e clique em Avançar.
  6. Na página Recursos, clique em Next.
  7. Na página Confirmar Seleções de Instalação, clique em Instalar.
  8. Na página Resultados , clique em Fechar.

Instruções

Como adicionar informações de associação a um site

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows 8 ou Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:

      • Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows Vista ou Windows 7:

      • Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
      • Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, expanda o nome do servidor e Sites e, em seguida, clique no site no qual deseja configurar as associações.

  3. No painel Ações, clique em Associações...

  4. Na caixa de diálogo Ligações do Site, clique em Adicionar.
    Screenshot of the Site Bindings dialog box.

  5. Na caixa de diálogo Adicionar Associação de Site, adicione as informações de associação e clique em OK.
    Screenshot of the Add Site Binding dialog box.

Como criar um repositório centralizado de certificados

  1. Pressione o botão Iniciar e clique em Gerenciador do Servidor. No Gerenciador do Servidor, clique em Ferramentase depois em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, selecione o nome do servidor.
  3. Na página Página Inicial, na área Gerenciamento, clique duas vezes em Certificados Centralizados.
  4. No painel Ações, clique em Editar Configurações de Recurso.
  5. Selecione Habilitar Certificados Centralizados e insira um caminho físico. Insira um nome de usuário e uma senha para o caminho e confirme a senha. Clique em OK.

Configuração

Você pode adicionar elementos <binding> dentro do elemento <bindings> para cada site no arquivo ApplicationHost.config. Cada site precisará ter, pelo menos, uma associação HTTP ou HTTPS exibida na Internet.

Atributos

Atributo Descrição
bindingInformation Atributo de cadeia de caracteres obrigatório.

Especifica informações para se comunicar com um site. Por exemplo, uma associação de site inclui o endereço IP (ou endereços IP não especificados), o número da porta e um cabeçalho de host opcional usado para se comunicar com o site.
protocol Atributo de cadeia de caracteres obrigatório.

Especifica o protocolo para se comunicar com um site.
sslFlags Atributo uint opcional.

Especifica o tipo de associação usado para certificados do SSL (protocolo SSL).
  • Um valor de “0” especifica que a conexão segura seja feita usando uma combinação de IP/porta. Apenas um certificado pode ser associado a uma combinação de endereço IP e a porta.
  • Um valor de “1” especifica que a conexão segura seja feita usando o número da porta e o nome do host obtidos usando a SNI (Indicação de Nome de Servidor).
  • Um valor de “2” especifica que a conexão segura seja feita usando o repositório centralizado de certificados SSL sem a necessidade de SNI um Indicador de Nome de Servidor.
  • Um valor de “3” especifica que a conexão segura seja feita usando o repositório centralizado de certificados SSL e exige um Indicador de Nome de Servidor
O suporte centralizado de certificados SSL permite criar um repositório centralizado de certificados que possa conter vários arquivos de certificado. Nomeie os arquivos de certificado para corresponder aos nomes de host que eles contêm. Isso permite criar uma associação que exija apenas uma porta, em vez de um IP/porta ou uma combinação de nome/porta de host. Quando uma solicitação entra, o IIS faz a correspondência à porta, determina o nome do host da solicitação e pesquisa no repositório centralizado de certificados um arquivo de certificado com um nome correspondente. Ele usa esse certificado.

Com um SNI (Indicador de Nome de Servidor), o nome do host é trocado como parte do handshake SSL. A SNI é habilitada na caixa de diálogo Adicionar Associação de Site ao adicionar uma associação com um tipo de HTTPS. Isso é especialmente útil para conexões SSL que hospedam vários servidores em um único endereço de rede. Para obter mais informações, consulte SNI (Indicação de Nome de Servidor) do IIS 8.0: Escalabilidade do SSL.

O atributo sslFlags só é definido quando o protocolo é https. O valor padrão é 0.

Elementos filho

Nenhum.

Exemplo de configuração

O exemplo a seguir define um site chamado Contoso com duas associações. A primeira associação é para um nome de host "www.contoso.com" na porta 80 para o endereço IP 192.168.0.1, e a segunda associação é para uma associação HTTPS para todos os endereços IP pela porta 443.

<site name="Contoso" id="2">
   <application path="/" applicationPool="Contoso">
      <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" />
   </application>
   <bindings>
      <binding protocol="http" bindingInformation="192.168.0.1:80:www.contoso.com" />
      <binding protocol="https" bindingInformation="*:443:" />
   </bindings>
</site>

Exemplo de código

Os exemplos a seguir configuram um site chamado Contoso com o nome de host "www.contoso.com" na porta 80 para o endereço IP 192.168.0.1 e uma associação HTTPS para todos os endereços IP pela porta 443.

AppCmd.exe

appcmd.exe set site /site.name:Contoso /+bindings.[protocol='http',bindingInformation='192.168.0.1:80:www.contoso.com']

appcmd.exe set site /site.name:Contoso /+bindings.[protocol='https',bindingInformation='*:443:']

Ou você pode usar:

appcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].bindings.[protocol='http',bindingInformation='192.168.0.1:80:www.contoso.com']" /commit:apphost

appcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].bindings.[protocol='https',bindingInformation='*:443:']" /commit:apphost

Observação

Defina o parâmetro commit para apphost quando usar AppCmd.exe para definir essas configurações. Isso confirma as definições de configuração para a seção de local apropriado no arquivo ApplicationHost.config.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
          Configuration config = serverManager.GetApplicationHostConfiguration();
          ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");
          ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();
          ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Contoso");

          if (siteElement == null) throw new InvalidOperationException("Element not found!");

          ConfigurationElementCollection bindingsCollection = siteElement.GetCollection("bindings");
          ConfigurationElement bindingElement = bindingsCollection.CreateElement("binding");
          bindingElement["protocol"] = @"http";
          bindingElement["bindingInformation"] = @"192.168.0.1:80:www.contoso.com";
          bindingsCollection.Add(bindingElement);

          ConfigurationElement bindingElement1 = bindingsCollection.CreateElement("binding");
          bindingElement1["protocol"] = @"https";
          bindingElement1["bindingInformation"] = @"*:443:";
          bindingsCollection.Add(bindingElement1);

          serverManager.CommitChanges();
      }
   }

   private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
   {
      foreach (ConfigurationElement element in collection)
      {
         if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
         {
            bool matches = true;
            for (int i = 0; i < keyValues.Length; i += 2)
            {
               object o = element.GetAttributeValue(keyValues[i]);
               string value = null;
               if (o != null)
               {
                  value = o.ToString();
               }
               if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
               {
                  matches = false;
                  break;
               }
            }
            if (matches)
            {
               return element;
            }
         }
      }
      return null;
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
      Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection
      Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "Contoso")

      If (siteElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim bindingsCollection As ConfigurationElementCollection = siteElement.GetCollection("bindings")

      Dim bindingElement As ConfigurationElement = bindingsCollection.CreateElement("binding")
      bindingElement("protocol") = "http"
      bindingElement("bindingInformation") = "192.168.0.1:80:www.contoso.com"
      bindingsCollection.Add(bindingElement)

      Dim bindingElement1 As ConfigurationElement = bindingsCollection.CreateElement("binding")
      bindingElement1("protocol") = "https"
      bindingElement1("bindingInformation") = "*:443:"
      bindingsCollection.Add(bindingElement1)

      serverManager.CommitChanges()
   End Sub

   Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
      For Each element As ConfigurationElement In collection
         If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
            Dim matches As Boolean = True
            Dim i As Integer
            For i = 0 To keyValues.Length - 1 Step 2
               Dim o As Object = element.GetAttributeValue(keyValues(i))
               Dim value As String = Nothing
               If (Not (o) Is Nothing) Then
                  value = o.ToString
               End If
               If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
                  matches = False
                  Exit For
               End If
            Next
            If matches Then
               Return element
            End If
         End If
      Next
      Return Nothing
   End Function


End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");
var sitesCollection = sitesSection.Collection;
var siteElementPos = FindElement(sitesCollection, "site", ["name", "Contoso"]);

if (siteElementPos == -1) throw "Element not found!";

var siteElement = sitesCollection.Item(siteElementPos);
var bindingsCollection = siteElement.ChildElements.Item("bindings").Collection;

var bindingElement = bindingsCollection.CreateNewElement("binding");
bindingElement.Properties.Item("protocol").Value = "http";
bindingElement.Properties.Item("bindingInformation").Value = "192.168.0.1:80:www.contoso.com";
bindingsCollection.AddElement(bindingElement);

var bindingElement1 = bindingsCollection.CreateNewElement("binding");
bindingElement1.Properties.Item("protocol").Value = "https";
bindingElement1.Properties.Item("bindingInformation").Value = "*:443:";
bindingsCollection.AddElement(bindingElement1);

adminManager.CommitChanges();

function FindElement(collection, elementTagName, valuesToMatch) {
   for (var i = 0; i < collection.Count; i++) {
      var element = collection.Item(i);
      if (element.Name == elementTagName) {
         var matches = true;
         for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
            var property = element.GetPropertyByName(valuesToMatch[iVal]);
            var value = property.Value;
            if (value != null) {
               value = value.toString();
            }
            if (value != valuesToMatch[iVal + 1]) {
               matches = false;
               break;
            }
         }
         if (matches) {
            return i;
         }
      }
   }
   return -1;
}

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set sitesCollection = sitesSection.Collection
siteElementPos = FindElement(sitesCollection, "site", Array("name", "Contoso"))

If siteElementPos = -1 Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If

Set siteElement = sitesCollection.Item(siteElementPos)
Set bindingsCollection = siteElement.ChildElements.Item("bindings").Collection

Set bindingElement = bindingsCollection.CreateNewElement("binding")
bindingElement.Properties.Item("protocol").Value = "http"
bindingElement.Properties.Item("bindingInformation").Value = "192.168.0.1:80:www.contoso.com"
bindingsCollection.AddElement(bindingElement)

Set bindingElement1 = bindingsCollection.CreateNewElement("binding")
bindingElement1.Properties.Item("protocol").Value = "https"
bindingElement1.Properties.Item("bindingInformation").Value = "*:443:"
bindingsCollection.AddElement(bindingElement1)

adminManager.CommitChanges()

Function FindElement(collection, elementTagName, valuesToMatch)
   For i = 0 To CInt(collection.Count) - 1
      Set element = collection.Item(i)
      If element.Name = elementTagName Then
         matches = True
         For iVal = 0 To UBound(valuesToMatch) Step 2
            Set property = element.GetPropertyByName(valuesToMatch(iVal))
            value = property.Value
            If Not IsNull(value) Then
               value = CStr(value)
            End If
            If Not value = CStr(valuesToMatch(iVal + 1)) Then
               matches = False
               Exit For
            End If
         Next
         If matches Then
            Exit For
         End If
      End If
   Next
   If matches Then
      FindElement = i
   Else
      FindElement = -1
   End If
End Function