微软Azure平台 cloud service动态绑定多个证书碰到的坑

我们有一个saas平台 部分在azure的cloud service 使用lets encrypt来申请证书。每一个商家申请域名之后就需要通过Lets encrypt来得到证书并绑定证书。

IIS里面能用到的证书是 放在localMachine的 WebHosting 或者 My下面 运行MMC 添加证书管理可以看到这个东西.

绑定证书的方法是可以放在webRole的OnStart 方法里面。 并使用ServerManager类 .(Microsoft.Web.Administration.dll)

大概代码是

                    var serverManager = new ServerManager();
                    var site = serverManager.Sites[0];
                    var bindings = site.Bindings.ToList();
                    foreach (var item in canBindCertificates)
                    {
                        var httpsBinding = bindings.FirstOrDefault(it => it.Protocol == "https" && it.Host == item.FriendlyName);
                        if (httpsBinding != null)
                        {
                            httpsBinding.CertificateStoreName = _store.Name;
                            httpsBinding.CertificateHash = item.GetCertHash();
                        }
                        else
                        {
                            var binding = site.Bindings.Add($"*:443:{item.FriendlyName}", item.GetCertHash(), _store.Name);
                            binding.Protocol = "https";
                            binding.SetAttributeValue("sslFlags", 1); //Important property
                        }
                    }
                    serverManager.CommitChanges();

 里面比较大的一个坑是 原来的证书会影响到这个绑定。 会导致你新绑定的域名 取不到正确的让书,或者原来的绑定失效。

需要处理的是在 ServiceDefinition.csdef文件里面加入两个没用的绑定。并在在 Webrole 启动的时候删掉哪个HostHeader为空的绑定。 其它的需要绑定都扔到动态绑定哪边。这样重新部署和新加新的网站就都正常了。

<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
<Binding name="HttpsEndpointEmpty" endpointName="HttpsEndpoint1" hostHeader="" />
<Binding name="HttpsEndpoint1" endpointName="HttpsEndpoint1" hostHeader="placeholder.{xxx}.com" />                 //{xxx}是你自己的域名
</Bindings>
</Site>

主要原因是配置文件没有办法设置SNI, 我们在代码里面强制把它设成SNI也会出错。(IIS打开的时候会看到SNI是没有勾选的) 。

我们是使用 AcmeClient (类库 https://github.com/ebekker/ACMESharp 示例项目 https://github.com/Lone-Coder/letsencrypt-win-simple/) 来申请证书的。发现这个东西也有一个小坑。每次申请一个新证书的进候是需要重新实例化这个类的。不然的话,在申请2个以上证书的时候会就会出错了 urn:acme:error:badNonce

时间: 2024-11-09 15:38:19

微软Azure平台 cloud service动态绑定多个证书碰到的坑的相关文章

Azure一个Cloud Service支持多个公网地址

Azure刚刚发布在同一个Cloud Service下支持多个公网IP地址的功能. 这个功能主要是用于: 当相同的端口需要公用相同的LoadBalance时. 比如: 一种使用场景是多组Web服务器被一组安全设备保护,每组服务器有自己独立的IP地址,如下图: ? 这时需要: 为CloudService添加多个VIP地址: ? PS C:\Users\hengz> Add-AzureVirtualIP -ServiceName hwmvip -VirtualIPName vip1 ? Operat

跟我学Windows Azure 四 Cloud Service中的WebRole与WorkRole,及他们之间的通信

Cloud Service 中WebRole就相当与我们的WebSite,而WorkRole相当与我们在服务器上写了个Windows Service,站在高可用的角度上来讲,Cloud Service要优于WebSite,拿个例子来说,我们上传个数据,数据需要入库,通常website需要提交数据,等待响应,这个时候如果并发量大,系统响应时间会很长.如果使用Cloud Service就不存在这个问题,WebRole只负责把数据提交上来,而对数据的处理入库则可以提交给WorkRole来处理,中间可以

Windows Azure Cloud Service (38) 微软IaaS与PaaS比较

<Windows Azure Platform 系列文章目录> 最近一直想总结Azure IaaS和PaaS的区别与比较,写个博文详细说明一下.建议读者在阅读之前,先熟悉微软PaaS和IaaS平台的基本概念,再参考本文. 1.Azure IaaS和PaaS的服务类型层次,请参考下面的图片: 对于IaaS来说,用户需要管理的对象是: -O/S,操作系统 -Middleware,中间件 -Runtime,运行时 -还有Data和Application 对于IaaS来说,客户就像是使用云端的虚拟机一

在Azure Cloud Service中部署Java Web App(1)

Microsoft Azure是一个开放的,灵活的云平台,除了对自家的.Net平台有良好的支持外,对于各种开源的软件,语言,工具,框架都有着良好的支持,比如Java,Php,Python等等,你可以使用自己喜欢的语言开发任何应用部署在Azure的web site或者云服务中. Azure的云服务是Azure的一个PAAS平台,同样支持多种不同的语言和框架,并且可以基于多种不同的阈值如CPU负载,队列,定时等等实现Auto scaling等高级功能,如下图所示: 本文简单介绍如何使用Azure所提

windows azure Vm、cloud service、web application 如何选择可用的服务

windows azure 的web应用和虚拟机都经常用.我们经常把我们的网站部署上去.一般选择web应用或者开一个虚拟机.开一个虚拟机就会按照虚拟机的使用时间进行计费. 那么我们选择web部署在哪里有什么区别呢. 这是从一个azure的研究人员那里找到的文章. 文章如下: 相信大家看过我的博文之后,对于Windows Azure托管服务有了一定的了解.那我们会发现一般情况下Windows Azure 服务分为三种,分别是: Windows Azure Website Cloud Service

Azure China (3) 使用Visual Studio 2013发布Cloud Service至Azure China

<Windows Azure Platform 系列文章目录> 之前有很多网友询问我如何通过VS发布Cloud Service至Azure China,这里我专门写篇文章,给大家详细介绍下. 笔者使用的是VS2013,首先我们下载Windows Azure SDK for .NET - 可以通过Azure China网站,地址在http://www.windowsazure.cn/zh-cn/downloads/?sdk=net. - 也可以通过Azure Global网站,地址在http:/

Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书

<Windows Azure Platform 系列文章目录> 在某些时候,我们需要在Azure PaaS Cloud Service配置HTTPS连接.本章将介绍如何在本地创建证书,然后使用HTTPS连接Azure Cloud Service. 1.创建证书 以管理员身份运行CMD,使用Makecert命令,安装Azure证书.具体的命令如下: makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a

怎样使用 OneAPM 监控微软 Azure Cloud Service ?

不知不觉微软 Azure 已经进入中国市场近两年的时间.那么 Azure 平台的性能到底怎样?资源载入的延迟.虚拟机的稳定性等问题是否切实满足客户期许.这些都是大家对微软 Azure 这个国外的云服务使者非常关注的问题. 市场对 IaaS 云服务商的对照评測报告数不胜数,非常难说谁家的评測报告准确可靠. 况且国内公网网络稳定情况与国外存在一定的差距.在这样一个相对不稳定的环境下.公有云服务的 SLA 对于客户的终于使用体验非常难全然保证.怎样可以帮助客户及时了解自己用户的真实体验.採用有效的工具

如何使用 OneAPM 监控微软 Azure Cloud Service ?

不知不觉微软 Azure 已经进入中国市场近两年的时间.那么 Azure 平台的性能究竟如何?资源加载的延迟.虚拟机的稳定性等问题是否切实满足客户期许.这些都是大家对微软 Azure 这个国外的云服务使者非常关注的问题. 市场对 IaaS 云服务商的对比评测报告数不胜数,很难说谁家的评测报告准确可靠.况且国内公网网络稳定情况与国外存在一定的差距.在这样一个相对不稳定的环境下,公有云服务的 SLA 对于客户的最终使用体验很难完全保证.如何能够帮助客户及时了解自己用户的真实体验,采用有效的工具实时监