NullReferenceException en Microsoft.Web.Administration al agregar el enlace https

Estoy tratando de agregar mediante programación un enlace a mi sitio web predeterminado; sin embargo, constantemente obtengo una excepción de referencia nula dentro de la dll Microsoft.Web.Administration. Originalmente quería asignar un certificado junto con el enlace. Pude consultar el certificado que quería con esto:

<code>var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);

var certificate = store.Certificates.Find(X509FindType.FindByIssuerName,
                                                  "TEST_SELF_SIGNED", true)
                                                  .OfType<X509Certificate>().FirstOrDefault();
</code>

Esto me dio correctamente el certificado que quería, no era nulo y tenía la información que esperaba.

<code>Site site = GetSite("Default Web Site");
var binding = site.Bindings.Add("*:443", certificate.GetCertHash(), "https");
</code>

Dado que ninguna de mis variables o cualquier otro elemento en el código de ejemplo es nulo (incluido GetCertHash que devuelve una matriz de 20 bytes), estoy confundido en cuanto a por qué obtengo un nulo aquí. Incluso probé la siguiente sobrecarga:

<code>site.Bindings.Add("*:443", "https");
</code>

Y todavía tengo la misma pila de referencia nula:

System.NullReferenceException was unhandled
  Message=Object reference not set to an instance of an object.
  Source=Microsoft.Web.Administration
  StackTrace:
       at Microsoft.Web.Administration.Configuration.SetDirty()
       at Microsoft.Web.Administration.ConfigurationElement.SetDirty()
       at Microsoft.Web.Administration.ConfigurationElement.SetAttributeValue(String attributeName, Object value)
       at Microsoft.Web.Administration.Binding.SetBindingProperty(String attributeName, String value)
       at Microsoft.Web.Administration.BindingCollection.Add(String bindingInformation, Byte[] certificateHash, String certificateStoreName)
       at TestApp.Program.Main(String[] args) in C:\Projects\Cube\trunk\src\AutoUpdate\TestApp\Program.cs:line 33
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

Aquí hay una aplicación de prueba completa que demuestra el problema, junto con los argumentos de la línea de comandos selfssl que utilicé para generar el certificado de muestra:

selfssl.exe / T / N: CN = TEST_SELF_SIGNED / K: 512 / V: 9999 / Q

<code>class Program
{
    static void Main(string[] args)
    {

        using (ServerManager manager = new ServerManager())
        {
            var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
            store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);

            var certificate = store.Certificates.Find(X509FindType.FindByIssuerName, "TEST_SELF_SIGNED", true).OfType<X509Certificate>().FirstOrDefault();

            Site site = GetSite("Default Web Site");
            site.Bindings.Add("*:443", certificate.GetCertHash(), store.Name);

            store.Close();

            manager.CommitChanges();
        }
    }

    public static Site GetSite(string siteName)
    {
        using (var serverManager = new ServerManager())
        {
            return serverManager.Sites.Where(p => p.Name.ToLower() == siteName.ToLower()).FirstOrDefault();
        }
    }
}
</code>

Solo para cubrir mis bases, Iis está instalado y la asignación manual del certificado funciona bien.

Respuestas a la pregunta(1)

Su respuesta a la pregunta