由于业务需要,上头发布任务,需要做一个动态绑定ssl证书的小功能,由于之前比较少接触ssl证书相关方面的知识,所以一时卡住了,不知道如何下手,所以第一反应就是找度娘(我知道这是个不好的习惯,见谅见谅),不知道是我查找的方式不对还是确实比较少人发布类似的文章,我百度了很久,很难找到相匹配的资料。这时我就想,我甚至都不知道这个ssl证书是怎么申请,申请后他会提供什么给我,这样就想做一个东西,也太不切实际了,是否应该先去了解下整个ssl证书申请和购买的流程,这样也许会有提供好的思路,果不其然,了解到购买ssl证书之后他会提供对应的文件(主要用到的是里面的.pfx文件)以及一个证书秘钥。既然他提供了这些东西给你,肯定会用在什么地方。
这里我使用的语言是c#,通过ServerManager类对iis进行相对应的操作(包括建立站点,程序池,绑定域名之类,这里不详细解释,网上有很多这方面的资料),我就想既然可以手动在iis创建域名并绑定ssl证书,那应该也有对应的实现方法,果然找到了里面的一个方法,贴上代码先
ServerManager sm = new ServerManager();
string bindingInformation = "*:" + port + ":" + bindingDomainName;
sm.Sites[webName].Bindings.Add(bindingInformation, certificateHash, certificateStoreName);
bindingInformation应该不用解释,一眼就看到是绑定的端口和域名, certificateHash和certificateStoreName又是什么呢?certificateHash参数类型是byte[],而certificateStoreName参数类型是string,通过直接百度翻译得到的结果是证书散列和证书,正在思考他们的来源时,突然想到购买ssl证书之后提供给我们的相关文件和秘钥,应该和这里大有关联,通过查询一些资料,得知certificateHash(证书散列)是通过.pfx文件获取而来的,而certificateStoreName则是证书名称,这里贴上完整的代码
/// <summary>
/// 增加绑定域名(ssl)
/// </summary>
/// <param name="webName">站点名称</param>
/// <param name="port">端口</param>
/// <param name="bindingDomainName">绑定域名</param>
public void AddHostHeaderSSL(