免费SSL证书 - Let's Encrypt申请(WINDOWS + IIS版)
Let’s Encrypt 项目是由互联网安全研究小组ISRG,Internet Security Research Group主导并开发的一个新型数字证书认证机构CA,Certificate Authority。该项目旨在开发一个自由且开放的自动化 CA 套件,并向公众提供相关的证书免费签发服务以降低安全通讯的财务、技术和教育成本。在过去的一年中,互联网安全研究小组拟定了 ACME 协议草案,并首次实现了使用该协议的应用套件:服务端 Boulder 和客户端 letsencrypt。
目前网络上大部分的申请教程都是基于linux的,我们这篇就是讲述如何在Windows服务器申请LE证书并安装到Nginx上的,如果想在windows服务器中安装LE的证书我们先需要利用:
ACMESharp:https://github.com/ebekker/ACMESharp
安装ACMESharp之前,我们必须保证服务器PowerShell版本是5.0以上,如果不是,请先升级PowerShell (版本查看命令是:$PSVersionTable.PSVersion)。
然后以管理员权限运行打开PowerShell执行:
PS> Install-Module -Name ACMESharp
来安装ACMESharp,安装过程需要看网络情况,服务器有条件的用vpn安装,没条件的多尝试几次。
ACMESharp安装完成后我们来开始申请LE证书:
第一步:导入ACMESharp模块
PS> Import-Module ACMESharp
第二步:初始化ACMEVault来保存和管理证书信息
PS> Initialize-ACMEVault
第三步:在LE填写注册信息,接受注册协议(注意替换命令中的邮箱地址)
PS> New-ACMERegistration -Contacts mailto:somebody@example.org -AcceptTos
第四步:创建一个你要申请域名身份(注意替换命令中的网址地址,下文不再继续提示)
PS> New-ACMEIdentifier -Dns myserver.example.com -Alias dns1
第五步:认证域名所有权
如果是IIS web服务器执行:
PS> Complete-ACMEChallenge dns1 -ChallengeType http-01 -Handler iis -HandlerParameters @{ WebSiteRef = '此处填IIS上的网站名' }
如果是其它web服务器,比如nginx需要自己配置的执行:
PS> Complete-ACMEChallenge dns1 -ChallengeType http-01 -Handler manual == Manual Challenge Handler - HTTP == * Handle Time: [1/12/2016 1:16:34 PM] * Challenge Token: [2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0] To complete this Challenge please create a new file under the server that is responding to the hostname and path given with the following characteristics: * HTTP URL: [http://myserver.example.com/.well-known/acme-challenge/2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0] * File Path: [.well-known/acme-challenge/2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0] * File Content: [2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0.H3URk7qFUvhyYzqJySfc9eM25RTDN7bN4pwil37Rgms] * MIME Type: [text/plain] ------------------------------------
执行完毕之后看返回结果LE的服务器在执行下一步时会访问你的这个地址: http://myserver.example.com/.well-known/acme-challenge/2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0
返回的文本内容是:
2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0.H3URk7qFUvhyYzqJySfc9eM25RTDN7bN4pwil37Rgms
在IIS中,执行以上命令后,会自动在指定的网站目录下创建.well-known文件夹与相关文件,只要直接查看就行。(2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0这串字符串在实际中请替换成自己的)
如果准备好了,我们继续下一步。
第六步:提交认证
PS> Submit-ACMEChallenge dns1 -ChallengeType http-01
提交之后我们接下来就需要等待LE服务器来验证了,我们可以通过命令:
PS> update-ACMEIdentifier dns1 ... Status : valid ...
来检查验证状态:
pedding 正在等待验证
valid 验证通过
invalid 验证失败,如果验证失败需要重新申请一次,也就是我们的第四步开始重新做一次,当然alias名称需要更换,因为已经存在记录了。
如果返回valid表示验证成功后我们继续下一步。
第七步:创建证书申请
PS> New-ACMECertificate dns1 -Generate -Alias cert1
PS> Submit-ACMECertificate cert1
我们通过以下来检查证书的状态:
PS> Update-ACMECertificate cert1 Id : 9182eb22-cd57-468e-946e-e0b0d8843906 Alias : cert2 Label : Memo : IdentifierRef : 198488a7-c778-488c-978b-606a0181deb9 KeyPemFile : 9182eb22-cd57-468e-946e-e0b0d8843906-key.pem CsrPemFile : 9182eb22-cd57-468e-946e-e0b0d8843906-csr.pem GenerateDetailsFile : 9182eb22-cd57-468e-946e-e0b0d8843906-gen.json CertificateRequest : ACMESharp.CertificateRequest CrtPemFile : 9182eb22-cd57-468e-946e-e0b0d8843906-crt.pem CrtDerFile : 9182eb22-cd57-468e-946e-e0b0d8843906-crt.der IssuerSerialNumber : SerialNumber : 00FAFC7F409C770B76EB9BA7445EC27B24494A Thumbprint : 9A59B855EA79B3E9DE1C14307E6A21851B3C0CE8 Signature : 9A59B855EA79B3E9DE1C14307E6A21851B3C0CE8 SignatureAlgorithm : sha256RSA
如果结果像以上情况则表示申请完毕,我们来下载证书文件吧。
第八步:下载证书文件
下载私钥:
PS> Get-ACMECertificate cert1 -ExportKeyPEM "C:\inetpub\wwwroot\网站目录\cert1.key.pem"
下载LE证书:
PS> Get-ACMECertificate cert1 -ExportCertificatePEM "C:\inetpub\wwwroot\网站目录\cert1.crt.pem" -ExportCertificateDER "C:\inetpub\wwwroot\网站目录\cert1.crt"
下载CA中间证书:
PS> Get-ACMECertificate cert1 -ExportIssuerPEM "C:\inetpub\wwwroot\网站目录\cert1-issuer.crt.pem" -ExportIssuerDER "C:\inetpub\wwwroot\网站目录\cert1-issuer.crt"
执行以上命令如果提示 Issuer certificate hasn't been resolved异常的话,按以下方式操作:
1.打开https://letsencrypt.org/certificates/,在服务器下载一下:Active ->ISRG Root X1.pem 保存到C:\inetpub\wwwroot\网站目录(这个目录是你网站的实际目录,请根据具体情况替换)
2.然后:Update-ACMECertificate cert1
3.重复执行 “下载CA中间证书”的命令即可。
下载IIS用的PFX文件:
PS> Get-ACMECertificate cert1 -ExportPkcs12 "C:\inetpub\wwwroot\网站目录\cert1.pfx"
PS> Get-ACMECertificate cert1 -ExportPkcs12 "C:\inetpub\wwwroot\网站目录\cert2.pfx" -CertificatePassword '你的密码'
如果是nginx的话只需要利用到上面三个证书文件,这里有一个特殊的地方,在nginx中ssl证书是在server中加入ssl信息:
server { server_name www.xxx.com; listen 443; ssl on; ssl_certificate D://full.pem; ssl_certificate_key D://key.pem; }
其中full.pem是由LE证书文件和CA中间证书合并的来的,把CA中间证书内容添加到LE证书中合并为一个full.pem文件,作为公钥,另一个就是私钥key.pem。
配置好之后启动nginx直接在浏览器加上https访问你的域名吧!
LE证书默认有三个月的有效期,我们可以每个月通过自动脚本来定是续订一个证书,续订证书的步骤就是重复第七部和第八步然后应用新证书。
注意:在https站点中所有的外部资源都需要通过https访问,否则会报安全错误(图片、视频等资源可以通过http访问但是控制台会出现警告)
文章转载于 http://www.07net01.com/linux/2016/03/1353540.html,本人根据实际使用情况(2017/2/14),略有补充与修改。