Baris está certo! O certificado SSL configurado em uma ligação IP: PORT (exemplo: 100.74.156.187:443) sempre tem precedência no http.sys! Então a solução é a seguinte:
Não configure uma ligação IP: 443 para seu certificado de fallback com curinga, mas configure uma ligação *: 443 (* significa "Todos os não atribuídos") para ela .
Se você configurou seu certificado curinga no terminal SSL do Serviço do Cloud Azure (como eu), precisará alterar a ligação SSL criada pelo Tempo de Execução do Serviço de Nuvem do Azure (IISconfigurator.exe) de IP: PORT para *: PORT. Estou chamando o método a seguir em OnStart da minha função da web:
public static void UnbindDefaultSslBindingFromIp()
{
Trace.TraceInformation(">> IISTenantManager: Unbind default SSL binding from IP");
using (var serverManager = new Microsoft.Web.Administration.ServerManager())
{
try
{
var websiteName = string.Format("{0}_Web", Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.CurrentRoleInstance.Id);
var site = serverManager.Sites[websiteName];
var defaultSslBinding = site.Bindings.Single(b => b.IsIPPortHostBinding && b.Protocol == "https");
defaultSslBinding.BindingInformation = string.Format("*:{0}:", defaultSslBinding.EndPoint.Port);
serverManager.CommitChanges();
}
catch (Exception ex)
{
Trace.TraceError(ex.ToString());
}
}
}
A captura de tela a seguir mostra uma configuração funcional do nosso serviço de nuvem. Por favor, não fique confuso sobre as portas não padronizadas. A captura de tela é do serviço de nuvem emulado.
Umaoutracoisaamencionar:Nãoaltereasligaçõesdeallpara*porquealigaçãoHTTP(porta80)sófuncionacomaligaçãoIP:PORTnoserviçodenuvemimplementado.AlgomaiséligadoaoIP:80,então*:80nãofuncionaporque*significa"todos não atribuídos" e o IP já está atribuído em algum outro lugar no http.sys.