生成线上用https证书,支持通配符和多域名,初学Let's Encrypt用于IIS,纯本地手动 官方并没有简单易用的客户端 使用Get HTTPS for free申请证书 使用到的脚本 申请制作过程 秀一波

自简书发布的上篇《生成本地测试用https证书,支持通配符和多域名,初学OpenSSL》以来,本地测试用https用的妥妥的。

线上一直用的腾讯云的免费证书(每个域名都要一个证书(滑稽),今天线上用的通配符证书也搞定了,实现了一个证书包含多个域名(多个泛域名)。

今年(2018)年初Let’s Encrypt已开放了通配符证书的申请《Wildcard Certificates Coming January 2018》,目前只支持通过dns解析进行验证。没有通配符的证书时在心里感觉用起来会很累,一直没有去尝试。以前AlphaSSL的通配符证书倒是可以免费申请,assl.loovit.net都已经跳转到别的地方了。现在可以勇敢的去用Let’s Encrypt的通配符证书了。

申请环境:本地(线上不乱搞),win7+Win32OpenSSL

Let’s Encrypt提供的客户端列表包括开源实现《ACME Client Implementations》,电脑上能装上的基本上都试了一下(捆绑生产环境的软件不鸟),好几个依赖高版本的.Net(勉为其难的装了一下),始终没搞懂怎么耍,入门到放弃。然后用C#调用了一个封装好的接口试了一下,目测工作量也不小,入门到放弃。

Let’s Encrypt 使用吐槽》这里面说的比较赞同的一点这才是你真正需要的 acme-client ,只干申请证书这一件事的脚本哈哈,其实发现申请证书只是简单的调用几个api.letsencrypt.orgRESTful接口,并且都含有响应头Access-Control-Allow-Origin:*,就不去研究他们的文档了,因为翻了一般官网,并没有发现哪里有这种直接了当的文档。

Let’s Encrypt提供的网页客户端列表中的Get HTTPS for free https://gethttpsforfree.com/就是直接使用的接口,这个网站声称This website is static, so it can be saved and loaded locally. Just right-click and "Save Page As.."! 查看代码确实是一个静态网站。其他几个网页客户端也稍微试了一下,有些要注册还主动帮你管理证书(不鸟)。其实一个静态网页也能够实现证书的申请,还不用下载安装各种环境,比较靠谱。

使用Get HTTPS for free申请证书

地址https://gethttpsforfree.com/
这个页面使用起来很方便,因为该提示的地方都有提示,按照提示做没有压力,顺利申请到了两个域名合在一起的证书。

主要要手动做的事情:

  1. 创建两个秘钥,一个账户秘钥,一个域名证书秘钥(2048位,这个网站写4096位感觉有点大,百度和Let’s Encrypt都是2048位)
  2. 创建证书申请请求
  3. 多次进行文本内容签名(用账户秘钥)

*. 申请好的证书制作成pfx文件导入IIS (我用IIS是要这一步的)

这些步骤都可以用脚本去处理,点一下->复制粘贴,手动也不比自动差(其实也没有便捷的全自动,dns验证还是要手动写入TXT记录)

使用到的脚本

下面这些文件全部是在同一个文件夹里面:
1.创建秘钥.cmd,2.生成请求.ini,2.生成请求.cmd,3.签名.cmd,3.签名.txt,4.导出.cmd

文件名:1.创建秘钥.cmd

@echo off

set /p isSet=创建秘钥会覆盖现有秘钥,确定要创建吗?(y)
if not "%isSet%"=="y" goto end

echo 创建账户秘钥
openssl genrsa -out key.account.private 2048
openssl rsa -in key.account.private -pubout -out key.account.public

echo 创建证书秘钥
openssl genrsa -out key.domain.key 2048

:end
echo 结束
pause

文件名:2.生成请求.ini
这个文件是OpenSSL安装目录中的配置文件,copy过来改一下名字就行了,然后在文件结尾添加下面内容,域名自己加(泛解析的要把一级域名加上,不加他们会不会自动加不知道,目测不会自动加)

[ ext ]
subjectAltName = @dns

[ dns ]
DNS.1 = baidu1.com
DNS.2 = *.baidu1.com
DNS.3 = baidu2.com
DNS.4 = *.baidu2.com

文件名:2.生成请求.cmd

@echo off

set /p isSet=需要先配置域名列表"2.生成请求.ini",配置好了吗?(y)
if not "%isSet%"=="y" goto end

echo 生成请求
openssl req -new -sha256 -key key.domain.key -out domain.csr -subj "/" -reqexts ext -config 2.生成请求.ini

:end
echo 结束
pause

文件名:3.签名.cmd

@echo off

set /p isSet=需要先写入"3.签名.txt",写好了吗?(y)
if not "%isSet%"=="y" goto end

openssl dgst -sha256 -hex -sign key.account.private 3.签名.txt

:end
echo 结束
pause

文件名:3.签名.txt
这个文件是一个空文件,到时候有需要签名的数据复制进来运行一下签名.cmd就能快速获得签名。

文件名:4.导出.cmd

@echo off

echo 导出pfx,请输入密码1
pause
openssl pkcs12 -export -out domain.pfx -inkey key.domain.key -in domain.crt

:end
echo 结束
pause

申请制作过程

  1. 所有文件准备好后(尤其是2.生成请求.ini把域名配置好),直接运行1.创建秘钥.cmd,然后直接运行2.生成请求.cmd
  2. 把生成的key.account.public填入网页Account Public Key中。
  3. 把生成的domain.csr填入网页Certificate Signing Request中。
  4. 根据网页提示签名请求,每次签名的时候:把文本复制到3.签名.txt(只要引号里面的文本内容,其他内容删除),然后运行3.签名.cmd得到签名,把RSA-SHA256(3.签名.txt)= XXXXX复制XXXXX到网页对应位置。
  5. 根据提示设置域名dns TXT解析,并完成验证。(检测txt是否生效方法见:https://www.cnblogs.com/kevin860/p/11216011.html
  6. 把最后一步生成的证书内容全部复制到新建的文件domain.crt中,域名证书就获取成功啦。
  7. 额外的生成IIS用的pfx文件,运行一下4.导出.cmd设置一下密码就行了,我提示输入1作为密码,是因为我懒(滑稽。

秀一波

 
生成线上用https证书,支持通配符和多域名,初学Let's Encrypt用于IIS,纯本地手动
官方并没有简单易用的客户端
使用Get HTTPS for free申请证书
使用到的脚本
申请制作过程
秀一波
证书域名

 
生成线上用https证书,支持通配符和多域名,初学Let's Encrypt用于IIS,纯本地手动
官方并没有简单易用的客户端
使用Get HTTPS for free申请证书
使用到的脚本
申请制作过程
秀一波
有效期

 
生成线上用https证书,支持通配符和多域名,初学Let's Encrypt用于IIS,纯本地手动
官方并没有简单易用的客户端
使用Get HTTPS for free申请证书
使用到的脚本
申请制作过程
秀一波
涉及到的文件