Enlace <binding>
Información general
El elemento <binding>
del elemento <bindings>
permite configurar la información necesaria para las solicitudes de comunicación con un sitio web.
Puede configurar la información de enlace al crear un sitio web, o bien editar la información de enlace después de crear el sitio. La información de enlace incluye el protocolo que los clientes usan para comunicarse con el sitio, la dirección IP del sitio, el número de puerto y un encabezado host.
El elemento <binding>
contiene dos atributos para configurar la información de enlace: bindingInformation y protocol. El atributo bindingInformation contiene la dirección IP, el número de puerto y, opcionalmente, el encabezado host del sitio. El protocolo protocol define el protocolo que se usará para comunicarse con el sitio.
Puede configurar la colección de enlaces para un sitio mediante el Administrador de IIS si selecciona el sitio y usa los vínculos Enlaces... o Configuración avanzada... del panel Acciones, o si hace clic en Editar enlaces... en el menú contextual del sitio.
IIS 8.0 o posterior le permite proporcionar seguridad para los sitios web mediante el uso de los certificados en un almacén de certificados centralizado en Windows Server 2012. Para más información, vea Compatibilidad con certificados SSL centralizados de IIS 8.0: escalabilidad y capacidad de administración de SSL.
El elemento binding le permite especificar el tipo de enlace que se usa para los certificados de Capa de sockets seguros (SSL).
Compatibilidad
Versión | Notas |
---|---|
IIS 10.0 | El elemento <binding> no se ha modificado en IIS 10.0. |
IIS 8.5 | El elemento <binding> no se ha modificado en IIS 8.5. |
IIS 8.0 | El atributo sslFlags se agregó para especificar el enlace usado para los certificados de Capa de sockets seguros. |
IIS 7.5 | El elemento <binding> no se ha modificado en IIS 7.5. |
IIS 7.0 | El elemento <binding> de la colección <bindings> se introdujo en IIS 7.0. |
IIS 6,0 | La colección <bindings> reemplaza las secciones de la propiedad ServerBindings en el objeto de metabase IIsWebServer de IIS 6.0. |
Configuración
El elemento <binding>
se incluye en la instalación predeterminada de IIS 7 y versiones posteriores.
Procedimiento para instalar un almacén de certificados centralizado
En IIS 8 y versiones posteriores, los certificados de un almacén de certificados centralizado se pueden usar para proporcionar seguridad para un sitio web. Para usar este almacén en el servidor web de Windows Server 2012 o versiones posteriores, debe instalar el rol Almacén de certificados SSL centralizado. Para hacerlo con IIS ya instalado, continúe de la siguiente manera:
- Presione la tecla Windows y, después, haga clic en Administrador del servidor.
- En Administrador del servidor, haga clic en Administrar y después en Agregar roles y características.
- En el Asistente para agregar roles y características, haga clic en la página Antes de comenzar, seleccione el tipo de instalación y, después, haga clic en Siguiente en la página Tipo de instalación y seleccione dónde realizar la instalación, y haga clic en Siguiente en las páginas Selección de servidor.
- En la página Roles de servidor, asegúrese de que Servidor web (IIS) está seleccionado y, después, expándalo. Expanda Servidor weby, después, seleccione y expanda Seguridad.
- Seleccione Almacén de certificados SSL centralizadoy haga clic en Siguiente.
- En la página Características, haga clic en Siguiente.
- En la página Confirmar selecciones de instalación, haz clic en Instalar.
- En la página Resultados , haga clic en Cerrar.
Procedimientos
Procedimiento para agregar información de enlace a un sitio
Abra el Administrador de Internet Information Services (IIS):
Si usa Windows Server 2012 o Windows Server 2012 R2:
- En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, después, en Administrador de Internet Information Services (IIS).
Si usa Windows 8 o Windows 8.1:
- Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
- Haga clic en Herramientas administrativas y, después, haga doble clic en Administrador de Internet Information Services (IIS).
Si usa Windows Server 2008 o Windows Server 2008 R2:
- En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, después, haga clic en Administrador de Internet Information Services (IIS).
Si usa Windows Vista o Windows 7:
- En la barra de tareas, haga clic en Inicio y luego en Panel de control.
- Haga doble clic en Herramientas administrativas y después en Administrador de Internet Information Services (IIS).
En el panel Conexiones, expanda el nombre del servidor, luego la opción Sitios y, después, haga clic en el sitio web en el que quiera configurar el enlace.
En el panel Acciones, haga clic en Enlaces....
En el cuadro de diálogo Enlaces de sitios, haga clic en Agregar....
En el cuadro de diálogo Agregar enlace de sitio, agregue la información de enlace y, después, haga clic en Aceptar.
Procedimiento para crear un almacén de certificados centralizado
- Presione el botón Inicio y, después, haga clic en Administrador del servidor. En Administrador del servidor, haga clic en Herramientasy después en Administrador de Internet Information Services (IIS).
- En el panel Conexiones, seleccione el nombre del servidor.
- En la páginaInicio, en el área Administración, haga doble clic en Certificados centralizados.
- En el panel Acciones, haga clic en Modificar configuración de característica.
- Seleccione Habilitar certificados centralizados y escriba una ruta de acceso física. Escriba un nombre de usuario y una contraseña para la ruta de acceso, y confirme la contraseña. Haga clic en OK.
Configuración
Puede agregar elementos <binding>
dentro del elemento <bindings>
para cada sitio en el archivo ApplicationHost.config. Cada sitio debe tener al menos un enlace HTTP o HTTPS para que se pueda ver en Internet.
Atributos
Atributo | Descripción |
---|---|
bindingInformation |
Atributo de cadena necesario. Especifica información para comunicarse con un sitio. Por ejemplo, un enlace de sitio web incluye la dirección IP (o direcciones IP no especificadas), el número de puerto y un encabezado host opcional que se usa para comunicarse con el sitio. |
protocol |
Atributo de cadena necesario. Especifica el protocolo para comunicarse con un sitio. |
sslFlags |
Atributo uint opcional. Especifica el tipo de enlace usado para los certificados de Capa de sockets seguros (SSL).
Con un indicador de nombre de servidor (SNI), el nombre de host se intercambia como parte del protocolo de enlace SSL. SNI se habilita en el cuadro de diálogo Agregar enlace de sitio al agregar un enlace con un tipo de HTTPS. Esto es especialmente útil para las conexiones SSL que hospedan varios servidores en una sola dirección de red. Para más información, vea Indicación de nombre de servidor (SNI) de IIS 8.0: escalabilidad de SSL. El atributo sslFlags solo se establece cuando el protocolo es https. El valor predeterminado es 0 . |
Elementos secundarios
Ninguno.
Ejemplo de configuración
En el ejemplo siguiente se define un sitio denominado Contoso con dos enlaces. El primer enlace es para un nombre de host de "www.contoso.com" en el puerto 80 para la dirección IP 192.168.0.1, y el segundo es para un enlace HTTPS para todas las direcciones IP en el puerto 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>
Código de ejemplo
En los ejemplos siguientes se configura un sitio con el nombre Contoso con un nombre de host de "www.contoso.com" en el puerto 80 para la dirección IP 192.168.0.1 y un enlace HTTPS para todas las direcciones IP en el puerto 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:']
O bien, puede usar lo siguiente:
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:
Debe asegurarse de establecer el parámetrocommit en apphost
cuando use AppCmd.exe para configurar estos valores. Esto confirma los valores de configuración en la sección de ubicación adecuada del archivo 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