Programmatically add binding on IIS 8 with SNI option

前端 未结 2 1038
梦如初夏
梦如初夏 2021-01-19 02:52

I\'m trying to create bindings for IIS 8 that have the flag SNI checked (Server Name Indication) using Microsoft.Web.Administration library (.NET Framework).

This is

相关标签:
2条回答
  • 2021-01-19 03:11

    I finally managed to do it using the Microsoft.Web.Administration from the folder %windir%\system32\inetsrv\ but only in Windows 8/Windows 2012 with IIS 8.

    These libraries had the SslFlags option in the Add function for BindingCollection class. There is no documentation from microsoft yet for this new overload, or at least I haven't found it.

    The SslFlags.Sni is available to use in this one and creates the binding with SNI check perfectly.

    0 讨论(0)
  • 2021-01-19 03:15

    Is it possible with current Microsoft.Web.Administration v 7.0.0.0?

    Indeed it is, by manually adding the SslFlags attribute to the <binding> node:

    Binding mySslBinding;
    bool enableSni;
    
    using (var serverManager = new ServerManager())
    {
        // ... create or get value of mySslBinding...
    
        mySslBinding.SetAttributeValue("sslFlags", Convert.ToInt32(enableSni ? 1 : 0));
    
        serverManager.CommitChanges();
    }
    

    See the documentation of SslFlags here: https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/sites/site/bindings/binding

    Note that executing the above code on a machine with any version of IIS earlier than 8.0 will cause the CommitChanges() method to throw an exception, because sslFlags doesn't exist in those versions.

    Warning: Enabling SNI on an existing binding may cause its certificate to be unselected!

    See also Setting Server Name Indication (SNI) takes off certificate binding

    To avoid this problem, you can do this:

    var cert = mySslBinding.CertificateHash;
    mySslBinding.SetAttributeValue("SslFlags", Convert.ToInt32(1));
    mySslBinding.CertificateHash = cert;
    
    0 讨论(0)
提交回复
热议问题