Condividi tramite


Binding <>

Panoramica

L'elemento <binding> dell'elemento <bindings> consente di configurare le informazioni necessarie per le richieste di comunicazione con un sito Web.

È possibile configurare le informazioni di associazione quando si crea un sito Web oppure è possibile modificare le informazioni di associazione dopo aver creato il sito. Le informazioni di associazione includono il protocollo usato dai client per comunicare con il sito, l'indirizzo IP del sito, il numero di porta e un'intestazione host.

L'elemento <binding> contiene due attributi per configurare le informazioni di associazione: bindingInformation e protocollo. L'attributo bindingInformation contiene l'indirizzo IP, il numero di porta e, facoltativamente, l'intestazione host per il sito. L'attributo del protocollo definisce il protocollo da usare per comunicare con il sito.

È possibile configurare la raccolta di associazioni per un sito tramite Gestione IIS selezionando il sito e utilizzando i collegamenti Binding... o Impostazioni avanzate nel riquadro Azioni oppure facendo clic su Modifica associazioni... nel menu di scelta rapida del sito.

IIS 8.0 o versione successiva consente di garantire la sicurezza per i siti Web usando i certificati in un archivio certificati centralizzato in Windows Server 2012. Per altre informazioni, vedere Supporto centralizzato dei certificati SSL iis 8.0: scalabilità e gestibilità SSL.

L'elemento di associazione consente di specificare il tipo di associazione usato per i certificati SSL (Secure Sockets Layer).

Compatibilità

Versione Note
IIS 10.0 L'elemento <binding> non è stato modificato in IIS 10.0.
IIS 8,5 L'elemento <binding> non è stato modificato in IIS 8.5.
IIS 8,0 L'attributo sslFlags è stato aggiunto per specificare l'associazione usata per i certificati Secure Sockets Layer.
IIS 7,5 L'elemento <binding> non è stato modificato in IIS 7.5.
IIS 7.0 L'elemento <binding><bindings> della raccolta è stato introdotto in IIS 7.0.
IIS 6.0 L'insieme <bindings> sostituisce le sezioni della proprietà ServerBindings nell'oggetto metabase IIS 6.0 IIsWebServer .

Installazione

L'elemento <binding> è incluso nell'installazione predefinita di IIS 7 e versioni successive.

Come installare un archivio certificati centralizzato

In IIS 8 e versioni successive i certificati in un archivio certificati centralizzato possono essere usati per garantire la sicurezza per un sito Web. Per usare questo archivio nel server Web Windows Server 2012 o versione successiva, è necessario installare il ruolo Archivio certificati SSL centralizzato. A tale scopo, con IIS già installato, procedere come segue:

  1. Premere il tasto Windows e quindi fare clic su Server Manager.
  2. In Server Manager fare clic su Gestisci e quindi su Aggiungi ruoli e funzionalità.
  3. Nella procedura guidata Aggiungi ruoli e funzionalità fare clic sulla pagina Prima di iniziare , selezionare il tipo di installazione e quindi fare clic su Avanti nella pagina Tipo di installazione e selezionare dove installare e fare clic su Avanti nelle pagine Selezione server .
  4. Nella pagina Ruoli server verificare che sia selezionato Server Web (IIS) e quindi espanderlo. Espandere Server Web e quindi selezionare e espandere Sicurezza.
  5. Selezionare Archivio certificati SSL centralizzato e quindi fare clic su Avanti.
  6. Nella pagina Funzionalità fare clic su Avanti.
  7. Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
  8. Nella pagina Risultati fare clic su Chiudi.

Procedure

Come aggiungere informazioni di associazione a un sito

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 o Windows Server 2012 R2:

      • Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8 o Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Server 2008 o Windows Server 2008 R2:

      • Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Vista o Windows 7:

      • Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
      • Fare doppio clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni espandere il nome del server, espandere Siti e quindi fare clic sul sito Web in cui si desidera configurare le associazioni.

  3. Nel riquadro Azioni fare clic su Associazioni...

  4. Nella finestra di dialogo Associazioni sito fare clic su Aggiungi...
    Screenshot della finestra di dialogo Associazioni sito.

  5. Nella finestra di dialogo Aggiungi associazione sito aggiungere le informazioni di associazione e quindi fare clic su OK.
    Screenshot della finestra di dialogo Aggiungi associazione sito.

Come creare un archivio certificati centralizzato

  1. Premere il pulsante Start e quindi fare clic su Server Manager. Nella Server Manager fare clic su Strumenti e quindi su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni selezionare il nome del server.
  3. Nella home page, nell'area Gestione fare doppio clic su Certificati centralizzati.
  4. Nel riquadro Azioni fare clic su Modifica impostazioni funzionalità.
  5. Selezionare Abilita certificati centralizzati e immettere un percorso fisico. Immettere un nome utente per il percorso, immettere una password per il percorso e confermare la password. Fare clic su OK.

Configurazione

È possibile aggiungere <binding> elementi all'interno dell'elemento <bindings> per ogni sito nel file ApplicationHost.config. Ogni sito deve avere almeno un'associazione HTTP o HTTPS per essere visualizzabile tramite Internet.

Attributi

Attributo Descrizione
bindingInformation Attributo stringa obbligatorio.

Specifica le informazioni per comunicare con un sito. Ad esempio, un'associazione di siti Web include l'indirizzo IP (o gli indirizzi IP non specificati), il numero di porta e un'intestazione host facoltativa usata per comunicare con il sito.
protocol Attributo stringa obbligatorio.

Specifica il protocollo per la comunicazione con un sito.
sslFlags Attributo uint facoltativo.

Specifica il tipo di associazione utilizzata per i certificati SSL (Secure Sockets Layer).
  • Il valore "0" specifica che la connessione protetta deve essere effettuata utilizzando una combinazione ip/porta. È possibile associare un solo certificato a una combinazione di indirizzo IP e porta.
  • Il valore "1" specifica che la connessione protetta deve essere stabilita usando il numero di porta e il nome host ottenuto tramite Indicazione nome server (SNI).
  • Il valore "2" specifica che la connessione protetta deve essere effettuata usando l'archivio certificati SSL centralizzato senza richiedere un indicatore del nome del server.
  • Il valore "3" specifica che la connessione sicura deve essere effettuata tramite l'archivio certificati SSL centralizzato, richiedendo l'indicatore del nome del server
Il supporto centralizzato dei certificati SSL consente di creare un archivio certificati centralizzato che può contenere più file di certificato. È possibile denominare i file di certificato in modo che corrispondano ai nomi host che contengono. In questo modo è possibile creare un'associazione che richiede solo una porta, anziché una combinazione di ip/porta o nome host/porta. Quando viene inviata una richiesta, IIS corrisponde alla porta, determina il nome host della richiesta e cerca un file di certificato centralizzato con un nome corrispondente. Usa tale certificato.

Con un indicatore del nome server (SNI), il nome host viene scambiato come parte dell'handshake SSL. SNI è abilitato nella finestra di dialogo Aggiungi associazione sito quando si aggiunge un'associazione con un tipo di HTTPS. Ciò è particolarmente utile per le connessioni SSL che ospitano più server in un singolo indirizzo di rete. Per altre informazioni, vedere Iis 8.0 Server Name Indication (SNI): SSL Scalability.

L'attributo sslFlags viene impostato solo quando il protocollo è https. Il valore predefinito è 0.

Elementi figlio

Nessuno.

Esempio di configurazione

L'esempio seguente definisce un sito denominato Contoso con due associazioni. La prima associazione è per un nome host "www.contoso.com" sulla porta 80 per l'indirizzo IP 192.168.0.1 e la seconda è per un'associazione HTTPS per tutti gli indirizzi IP sulla 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>

Codice di esempio

Gli esempi seguenti configurano un sito denominato Contoso con un nome host "www.contoso.com" sulla porta 80 per l'indirizzo IP 192.168.0.1 e un'associazione HTTPS per tutti gli indirizzi IP sulla 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:']

In alternativa, è possibile usare:

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

Nota

È necessario assicurarsi di impostare il parametro commit su apphost quando si usa AppCmd.exe per configurare queste impostazioni. In questo modo le impostazioni di configurazione vengono confermate nella sezione relativa al percorso appropriato nel file 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