Freigeben über


Bindung <binding>

Übersicht

Mit dem Element <binding> des Elements <bindings> können Sie die informationen konfigurieren, die für Anforderungen für die Kommunikation mit einer Website erforderlich sind.

Sie können Bindungsinformationen konfigurieren, wenn Sie eine Website erstellen, oder Sie können die Bindungsinformationen bearbeiten, nachdem Sie die Website erstellt haben. Bindungsinformationen umfassen das Protokoll, das Clients für die Kommunikation mit dem Standort, der IP-Adresse des Standorts, der Portnummer und einem Hostheader verwenden.

Das Element <binding> enthält zwei Attribute zum Konfigurieren der Bindungsinformationen: bindingInformation und Protokoll. Das Attribut bindingInformation enthält die IP-Adresse, die Portnummer und optional den Hostheader für die Website. Das Attribut Protokoll definiert das Protokoll, das für die Kommunikation mit der Website verwendet werden soll.

Sie können die Sammlung von Bindungen für eine Website mithilfe des IIS-Managers konfigurieren, indem Sie die Website auswählen und die Links Bindungen ... oder Erweiterte Einstellungen ... im Bereich Aktionen verwenden oder indem Sie im Kontextmenü der Website auf Bindungen bearbeiten klicken.

MIT IIS 8.0 oder höher können Sie Mithilfe der Zertifikate in einem zentralisierten Zertifikatspeicher unter Windows Server 2012 Sicherheit für Websites bereitstellen. Weitere Informationen finden Sie unter IIS 8.0 unterstützt zentralisierte SSL-Zertifikate: SSL-Skalierbarkeit und Verwaltbarkeit .

Mit dem Element Bindung können Sie den Typ der Bindung angeben, die für SSL-Zertifikate (Secure Sockets Layer) verwendet wird.

Kompatibilität

Version Hinweise
(IIS 10.0 UND HÖHER) Das <binding> Element wurde in IIS 10.0 nicht geändert.
IIS 8.5 Das <binding> Element wurde in IIS 8.5 nicht geändert.
IIS 8.0 Das Attribut sslFlags wurde hinzugefügt, um die Bindung anzugeben, die für Secure Sockets Layer-Zertifikate verwendet wird.
IIS 7.5 Das <binding>-Element wurde in IIS 7.5 nicht geändert.
IIS 7.0 Das <binding>-Element der <bindings>-Auflistung wurde in IIS 7.0 eingeführt.
IIS 6.0 Die Sammlung <bindings> ersetzt Abschnitte der Eigenschaft ServerBindings im IIS 6.0 IIsWebServer-Metabasisobjekt.

Setup

Das <binding>-Element ist in der Standardinstallation von IIS 7 und höheren Versionen enthalten.

So installieren Sie einen zentralisierten Zertifikatspeicher

In IIS 8 und höher können die Zertifikate in einem zentralisierten Zertifikatspeicher verwendet werden, um Sicherheit für eine Website bereitzustellen. Um diesen Speicher auf Ihrem Webserver mit Windows Server 2012 oder höher zu verwenden, müssen Sie die Rolle des zentralisierten SSL-Zertifikatspeichers installieren. Gehen Sie wie folgt vor, um dies mit bereits installierter IIS zu tun:

  1. Drücken Sie die Windows-Taste und klicken Sie dann auf Server-Manager.
  2. Klicken Sie im Server-Manager auf Verwalten und dann auf Rollen und Features hinzufügen.
  3. Klicken Sie im Assistenten zum Hinzufügen von Rollen und Features auf die Seite Bevor Sie beginnen, wählen Sie den Installationstyp aus und klicken Sie dann auf der Seite Installationstyp auf Weiter. Wählen Sie den Speicherort für die Installation aus und klicken Sie auf den Seiten Serverauswahl auf Weiter.
  4. Stellen Sie auf der Seite Serverrollen sicher, dass Webserver (IIS) ausgewählt ist, und erweitern Sie diesen Eintrag. Erweitern Sie Webserver und wählen und erweitern Sie dann Sicherheit.
  5. Wählen Sie Zentralisierter SSL-Zertifikatspeicher aus und klicken Sie dann auf Weiter.
  6. Klicken Sie auf der Seite Features auf Weiter.
  7. Klicken Sie auf der Seite Installationsauswahl bestätigen auf Installieren.
  8. Klicken Sie auf der Seite Ergebnisse auf Schließen.

Gewusst wie

Hinzufügen von Bindungsinformationen zu einer Website

  1. Öffnen Sie den Internet Information Services (IIS) Manager:

    • Wenn Sie Windows Server 2012 oder Windows Server 2012 R2 verwenden:

      • Klicken Sie der der Taskleiste auf Server-Managerdann auf Toolsund dann auf den Internet Information Services (IIS) Manager.
    • Wenn Sie Windows 8 oder Windows 8.1 verwenden:

      • Halten Sie die Windows-Taste gedrückt, drücken Sie den Buchstaben X, und klicken Sie dann auf "Systemsteuerung".
      • Klicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
    • Wenn Sie Windows Server 2008 oder Windows Server 2008 R2 verwenden:

      • Klicken Sie auf der Taskleiste auf Start, zeigen Sie auf Verwaltungund dann auf den Internet Information Services (IIS) Manager.
    • Wenn Sie Windows Vista oder Windows 7 verwenden:

      • Klicken Sie auf der Taskleiste auf Start und dann auf Systemsteuerung.
      • Doppelklicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
  2. Erweitern Sie im Bereich Verbindungen den Servernamen, erweitern Sie Websites, und klicken Sie dann auf die Website, auf der Sie die Bindungen konfigurieren möchten.

  3. Klicken Sie im Bereich Aktionen auf Bindungen ....

  4. Klicken Sie im Dialogfeld Sitebindungen auf Hinzufügen ....
    Screenshot of the Site Bindings dialog box.

  5. Fügen Sie im Dialogfeld Websitebindung hinzufügen die Bindungsinformationen hinzu, und klicken Sie dann auf OK.
    Screenshot of the Add Site Binding dialog box.

Erstellen eines zentralisierten Zertifikatspeichers

  1. Drücken Sie die Schaltfläche Start und klicken Sie dann auf Server-Manager. Klicken Sie in Server-Manager auf Tools und klicken Sie dann auf Internetinformationsdienste-Manager.
  2. Wählen Sie im Bereich Verbindungen den Servernamen aus.
  3. Doppelklicken Sie auf der Startseite unter dem Bereich Verwaltung auf zentralisierte Zertifikate.
  4. Klicken Sie im Bereich Aktionen auf Featureeinstellungen bearbeiten.
  5. Wählen Sie Zentralisierte Zertifikate aktivieren aus und geben Sie einen physischen Pfad ein. Geben Sie einen Benutzernamen für den Pfad ein, geben Sie ein Kennwort für den Pfad ein, und bestätigen Sie das Kennwort. Klicken Sie auf OK.

Konfiguration

Sie können <binding>-Elemente innerhalb des <bindings>-Elements für jede Website in der Datei ApplicationHost.config hinzufügen. Jede Website muss über mindestens eine HTTP- oder HTTPS-Bindung verfügen, damit sie über das Internet angezeigt werden kann.

Attribute

Attribut Beschreibung
bindingInformation Erforderliches Zeichenfolgenattribut.

Gibt Informationen an, die mit einer Website kommuniziert werden sollen. Beispielsweise enthält eine Websitebindung die IP-Adresse (oder nicht angegebene IP-Adressen), die Portnummer und einen optionalen Hostheader, der für die Kommunikation mit der Website verwendet wird.
protocol Erforderliches Zeichenfolgenattribut.

Gibt das Protokoll für die Kommunikation mit einer Website an.
sslFlags Optionales Uint-Attribut.

Gibt den Typ der Bindung an, die für SSL-Zertifikate (Secure Sockets Layer) verwendet wird.
  • Ein Wert von „0“ gibt an, dass die sichere Verbindung mithilfe einer Kombination aus IP/Port hergestellt wird. Nur ein Zertifikat kann an eine Kombination aus IP-Adresse und Port gebunden werden.
  • Ein Wert von „1“ gibt an, dass die sichere Verbindung mithilfe der Portnummer und des Hostnamens hergestellt wird, der mithilfe der Servernamensanzeige (SNI) abgerufen wird.
  • Ein Wert von „2“ gibt an, dass die sichere Verbindung mithilfe des zentralen SSL-Zertifikatspeichers hergestellt wird, ohne dass ein Servernamenindikator erforderlich ist.
  • Ein Wert von „3“ gibt an, dass die sichere Verbindung mithilfe des zentralisierten SSL-Zertifikatspeichers hergestellt wird, wobei die Servernamenanzeige erforderlich ist
Mithilfe der zentralisierten SSL-Zertifikatunterstützung können Sie einen zentralisierten Zertifikatspeicher erstellen, der mehrere Zertifikatdateien enthalten kann. Sie können die Zertifikatdateien benennen, um den Hostnamen zu entsprechen, die sie enthalten. Auf diese Weise können Sie eine Bindung erstellen, die nur einen Port erfordert, anstatt eine IP/Port- oder Hostname/Port-Kombination. Wenn eine Anforderung eingeht, stimmt IIS den Port ab, bestimmt den Hostnamen aus der Anforderung und durchsucht den zentralisierten Zertifikatspeicher nach einer Zertifikatdatei mit einem übereinstimmenden Namen. Es verwendet dieses Zertifikat.

Bei einem Servernamenindikator (Server Name Indicator, SNI) wird der Hostname als Teil des SSL-Handshakes ausgetauscht. SNI wird im Dialogfeld „Websitebindung hinzufügen“ aktiviert, wenn Sie eine Bindung mit einem HTTPS-Typ hinzufügen. Dies ist besonders nützlich für SSL-Verbindungen, die mehrere Server auf einer einzelnen Netzwerkadresse hosten. Weitere Informationen finden Sie unter IIS 8.0 Servernamensanzeige (SNI): SSL-Skalierbarkeit.

Das Attribut sslFlags wird nur festgelegt, wenn das Protokoll httpsist. Der Standardwert ist 0.

Untergeordnete Elemente

Keine.

Konfigurationsbeispiel

Im folgenden Beispiel wird eine Website namens Contoso mit zwei Bindungen definiert. Die erste Bindung ist für einen Hostnamen von „www.contoso.com“ auf Port 80 für die IP-Adresse von 192.168.0.1 und die zweite Bindung für eine HTTPS-Bindung für alle IP-Adressen über Port 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>

Beispielcode

Die folgenden Beispiele konfigurieren eine Website namens Contoso mit dem Hostnamen „www.contoso.com“ am Port 80 für die IP-Adresse 192.168.0.1 und eine HTTPS-Bindung für alle IP-Adressen über Port 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:']

Oder Sie können Folgendes verwenden:

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

Hinweis

Sie müssen unbedingt den Commitparameter auf apphost festlegen, wenn Sie AppCmd.exe verwenden, um diese Einstellungen zu konfigurieren. Dadurch werden die Konfigurationseinstellungen auf den entsprechenden Speicherortabschnitt in der Datei ApplicationHost.config festgelegt.

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