申请免费的SSL证书(Win7,PowerShell,Let's Encrypt)
随着网络安全形势的发展,SSL已是各大网站的标配,启用SSL的好处自然不必多说,然后每份SSL证书也要花费不菲的银子,按最便宜的DV证书来看,每年也要个四五百呢。
有趋势有需求,自然也有免费可用。免费的SSL证书中,首推就是Let's Encrypt。
Let's Encrypt,官网是https://letsencrypt.org/,它是一个由各大公司赞助的公益组织,我们看看它的介绍。
“Let’s Encrypt is a free, automated, and open certificate authority brought to you by the non-profit Internet Security Research Group (ISRG).”
既然是个公益组织,所以不可能请很多工作人员,所以,Let's Encrypt研发了一套协议,命名为ACME protocol(Automatic Certificate Management Environment),借助这套协议,更多热心人员开发了相应的工具,使用这些工具就可以不借助其他人的帮助下,完成SSL证书的申请。
目前已有各种工具可以用于申请证书,你可以在如下这个地址里查找:
https://letsencrypt.org/docs/client-options/
我最熟悉的自然是Windows平台,此平台下,首推ACMESharp工具,因此将用此工具来进行SSL证书的申请。
我们需要准备的有:
1、一台可以访问Internet的Windows 7电脑,并具备管理员权限
2、Powershell 5.0
3、SSL证书对应的网站域名
4、一个邮箱地址
5、可以设置网站域名的DNS,或者可以设置网站下的文件夹和文件内容
如何查看和升级Powershell,请参见查看Powershell的版本和升级Powershell到5.0(最新版本)。
ACMESharp是一个开源软件,它的源代码位于“https://github.com/ebekker/ACMESharp”,如果你感兴趣,可以到此网址下载源代码自行研究。
它也自带了一个英文版的快速安装指引,访问地址为:https://github.com/ebekker/ACMESharp/wiki/Quick-Start。
申请步骤详情如下:
如下的命令,必须以管理员身份运行Powershell,方能执行成功。
1、下载ACMESharp的Powershell模块
Save-Module -Name ACMESharp -Path <path>
这里的<path>,请自行替换为你本地的路径。
最新版本是0.8.1,你也可以点此位置下载。
2、复制ACMESharp进入到Powershell目录下的Module文件夹中,通常这个文件夹位于:C:\Program Files\WindowsPowerShell\Modules目录下
3、安装ACMESharp的Powershell模块
Install-Module -Name ACMESharp
4、导入ACMESharp的Powershell模块
Import-Module ACMESharp
5、初始化Vault(Vault将用于存储证书和相关信息)
如果是第一次运行,则不会有任何输出,但如果是第二次运行,则会有错误提示,提示说Vault已存在。
Initialize-ACMEVault
6、向Let‘s Encrypt注册用户信息,并接受其服务协议
New-ACMERegistration -Contacts mailto:<Email Address> -AcceptTos
这里的<Email Address>,请替换为你的邮箱地址。
-AcceptTos,就是表示接受服务协议。
7、添加需要申请SSL证书的域名
New-ACMEIdentifier -Dns <Domain Name> -Alias <Mark>
这里的<Domain Name>,请替换为你需要申请SSL证书的那个域名。
这里的<Mark>,请替换为任意的一个别名,这个别名将用于后续申请中,用于代指你的域名。
8、验证这个域名的归属权是否属于申请人,Let‘s Encrypt提供了三种自助方式,可以自行选择一种。
8.1、通过IIS来验证(这个我尚未测试成功过,所以后续操作,只是仅对英文版指引所做的翻译)
如果你的网站所在的服务器是IIS 7.0及以上版本,而且你可以在服务器上运行脚本(我猜测还需要服务器可以主动向Let's Encrypt网站发送一些内容),可以尝试用如下脚本来验证。
Complete-ACMEChallenge dns1 -ChallengeType http-01 -Handler iis -HandlerParameters @{ WebSiteRef = 'Default Web Site' }
其中'Default Web Site'应该是IIS中这个Website的名称。
8.2、通过在网站指定目录下存放指定文件来验证,文件中存放指定内容(本人亲自验证)
首先请运行如下命令:
Complete-ACMEChallenge <Mark> -ChallengeType http-01 -Handler manual
这里的<Mark>,请替换为之前的别名。一旦执行完毕了,你将会看到如下内容。
== 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://<Domain Name>/.well-known/acme-challenge/2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0]
* File Path: [.well-known/acme-challenge/2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0]
* File Content: [2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0.H3URk7qFUvhyYzqJySfc9eM25RTDN7bN4pwil37Rgms]
* MIME Type: [text/plain]
------------------------------------
其中<Domain Name>就是我们申请SSL证书时的域名。
这段内容,我们需要关注的是HTTP URL、File Path、File Content这三块。
首先,请打开一个记事本,将File Content对应的内容贴入其中(其中[]是不需要贴入的),然后保存成一个文件,文件的名称是File Path中".well-known/acme-challenge/"后面那一部分。请注意,这个文件名称是不能有后缀名的,所以保存类型必须选择“所有文件”,类似如下图。
接下来,我们需要在网站根目录下创建一个文件夹“.well-known”,这个文件夹在Windows下必须通过命令行创建。
在.well-known文件夹下,继续创建文件夹“acme-challenge”,创建完毕后,将之前保存的文件放在此目录下。
完成上述操作后,我们需要先验证一下,可打开浏览器,地址中贴入HTTP URL,如果我们能看到File Content对应的那一串字符串,那么下一步我们可以提交给Let's Encrypt来验证。
8.3、通过设置一个独立的二级域名来验证
首先请运行如下命令:
Complete-ACMEChallenge <Mark> -ChallengeType dns-01 -Handler manual
这里的<Mark>,请替换为之前的别名。一旦执行完毕了,你将会看到如下内容。
== Manual Challenge Handler - DNS ==
* Handle Time: [1/12/2016 1:41:51 PM]
* Challenge Token: [xfc0oQahXVqdaBlcZbk5nL8H-GSDFCoQ8LGzOL07qVI]
To complete this Challenge please create a new Resource
Record (RR) with the following characteristics:
* RR Type: [TXT]
* RR Name: [_acme-challenge.<Domain Name>]
* RR Value: [vNx_fpLgvq0l4rqSATuxhxl9pa155SoeKvNZ98AFB_4]
------------------------------------
需要设置一个二级域名,域名名称为RR Name对应的内容,域名类型为TXT,域名类型为RR Value的内容,类似如下图。
下一步我们可以提交给Let's Encrypt来验证。
9、向Let's Encrypt提交申请,验证域名所属权。(8.1方式是不需要此步的)
如果选择了8.2方式来申请验证,则执行如下命令来提交申请。
Submit-ACMEChallenge <Mark> -ChallengeType http-01
如果选择了8.3方式来申请验证,则执行如下命令来提交申请。
Submit-ACMEChallenge <Mark> -ChallengeType dns-01
这里的<Mark>,请替换为之前的别名。
执行了上述命令后,Let's Encrypt将会受到验证请求。但此请求不会立刻有反馈的,需要等待几分钟。
10、查看Let's Encrypt的验证结果
如果选择了8.2方式来申请验证,则执行如下命令来查看验证结果。
(Update-ACMEIdentifier <Mark> -ChallengeType http-01).Challenges | Where-Object {$_.Type -eq "http-01"}
如果选择了8.3方式来申请验证,则执行如下命令来查看验证结果。
(Update-ACMEIdentifier <Mark> -ChallengeType dns-01).Challenges | Where-Object {$_.Type -eq "dns-01"}
这里的<Mark>,请替换为之前的别名。
执行命令之后,将会看到一些内容,其中会有一项“Status”。
如果看到的是Pending,则表示尚未验证,则继续等待中。
如果看到的是Invalid,则表示验证失败,需要仔细查看过往操作,从第6步开始,重新执行。
如果看到的是Valid,则表示验证成功。
一旦验证成功,执行如下命令,查看域名对应的SSL证书是否已准备好。
Update-ACMEIdentifier <Mark>
执行命令之后,将会看到一些内容,其中会有一项“Status”,如果看到了Valid,则表示准备好了,即可开始导出证书了。
11、提交PKI证书请求
执行如下命令,则会创建一个PKI证书请求。
New-ACMECertificate <Mark> -Generate -Alias <CertName>
Submit-ACMECertificate <CertName>
这里的<Mark>,请替换为之前的别名。这里的<CertName>,请自行设置一个个性化的证书名称。
执行完毕后,将会看到如下内容:
Id : 8e38e529-55e2-4096-afb8-4f9947d6da6d
Alias : <CertName>
Label :
Memo :
IdentifierRef : 198488a7-c778-488c-978b-606a0181deb9
KeyPemFile :
CsrPemFile :
GenerateDetailsFile : 8e38e529-55e2-4096-afb8-4f9947d6da6d-gen.json
CertificateRequest :
CrtPemFile :
CrtDerFile :
IssuerSerialNumber :
SerialNumber :
Thumbprint :
Signature :
SignatureAlgorithm :
接下来,执行如下命令,更新证书。
Update-ACMECertificate <CertName>
执行完毕后,将看到如下内容。
Id : 9182eb22-cd57-468e-946e-e0b0d8843906
Alias : <CertName>
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
可以看到证书的签名算法是sha256RSA。至此,可以导出证书了。
12、导出SSL证书
12.1 导出私人秘钥(PEM)
执行如下命令,其中<CertName>是之前自定义证书名称,<存放路径>请自行替换为存放证书的路径。
Get-ACMECertificate <CertName> -ExportKeyPEM "<存放路径>\<CertName>.key.pem"
12.2 导出证书签名请求(CSR)
执行如下命令,其中<CertName>是之前自定义证书名称,<存放路径>请自行替换为存放证书的路径。
Get-ACMECertificate <CertName> -ExportCsrPEM "<存放路径>\<CertName>.csr.pem"
12.3 导出由LE(Let's Encrypt)发布的证书
执行如下命令,其中<CertName>是之前自定义证书名称,<存放路径>请自行替换为存放证书的路径。
Get-ACMECertificate <CertName> -ExportCertificatePEM "<存放路径>\<CertName>.crt.pem" -ExportCertificateDER "<存放路径>\<CertName>.crt"
这里会导出两种格式的证书文件,一种是PEM格式,另一种是DER格式。
12.4 导出LE(Let's Encrypt)这个发布者自己的证书
执行如下命令,其中<CertName>是之前自定义证书名称,<存放路径>请自行替换为存放证书的路径。
Get-ACMECertificate <CertName> -ExportIssuerPEM "<存放路径>\<CertName>-issuer.crt.pem" -ExportIssuerDER "<存放路径>\<CertName>-issuer.crt"
这里会导出两种格式的证书文件,一种是PEM格式,另一种是DER格式,自行对应12.3步导出的证书格式。
12.5 导出PKCS#12 (PFX)证书
对于Windows下的IIS站点,我们需要导出PFX格式证书。执行如下命令,其中<CertName>是之前自定义证书名称,<存放路径>请自行替换为存放证书的路径。
Get-ACMECertificate <CertName> -ExportPkcs12 "<存放路径>\<CertName>.pfx" -CertificatePassword '<证书自定义密码>'
至此,我们已成功申请下来SSL证书了。
下一步,将是安装证书了。
《本篇结束》
申请免费的SSL证书(Win7,PowerShell,Let's Encrypt)的更多相关文章
- 【转载】网站配置Https证书系列(一):腾讯云申请免费的SSL证书的流程步骤(即https安全连接使用的证书)
很多网站为了安全性考虑都会上https安全连接,此时就需要考虑使用SSL证书,其实在腾讯云这边提供有免费的SSL证书申请,登录腾讯云管理控制台后,进入SSL证书管理页面,里面有个申请免费证书.腾讯云申 ...
- startSSL 申请免费的SSL证书
打开网址https://www.startssl.com/?app=12,选择Sign-up注册. 输入个人注册信息 需注意以下几点:(1)地址必须详细,否则你会收到这样的邮件: Please pro ...
- startssl,免费的ssl证书申请及注意事项
免费的ssl证书,https://www.startssl.com/ 安装到IIS和Nginx有所不同.原文 http://blog.newnaw.com/?p=1232 ------------转自 ...
- Let's Encrypt 免费通配符 SSL 证书申请教程——但是也需要email,域名所有权等,如果是黑产用的话会这样用吗?会不会暴露自己身份???
Let's Encrypt 免费通配符 SSL 证书申请教程 from:https://blog.csdn.net/English0523/article/details/79608464 2018 ...
- 使用acme.sh自动申请、续期、部署免费的SSL证书
参考文档:https://github.com/acmesh-official/acme.sh 一个使用纯shell操作的免费SSL证书申请部署工具. 免费的SSL证书由以下CA机构提供: ZeroS ...
- 免费的SSL证书,免费为微信小程序搭建https
StartSSL 也免费提供了一个证书(纯英文) 申请地址:https://www.startssl.com/Account?r=L1ZhbGlkYXRl 阿里云免费提供的证书 https://com ...
- 阿里云免费购买SSL证书,nginx无缝升级https
最近在升级交流学习社区,觉得有必要升级成https.以下是自己在升级中记录. 以下包括以下部分: 一.阿里云免费购买SSL证书 1.自己在阿里云申请了免费的,然后自己支付0元,购买了SSL证书 2.我 ...
- 转载免费的SSL证书
目前我知道的有2种方式进行免费的SSL证书的获取 第一种:腾讯云申请 第二种:Let's Encrypt (国外在) 我一直使用第一种,还可以,有效期1年. 以下转载第二种: 实战申请Let's En ...
- 免费的SSL证书(LINUX)
贫穷限制了我的SSL. 说起来也简单,免费的SSL证书授权机构,我使用的是Certbot 选择服务器开启的服务,像我php之流,无非apache和nginx,然后选择使用的服务器类型.嗯,补充一句,这 ...
随机推荐
- [转]tar 分包压缩与合并
要将目录logs打包压缩并分割成多个1M的文件,可以用下面的命令: tar cjf - logs/ |split -b 1m - logs.tar.bz2. 完成后会产生下列文件: logs.ta ...
- 功率W与dBm的对照表及关系(转)
源:功率W与dBm的对照表及关系 功率W与dBm的对照表 dBm Watts dBm Watts 0 ...
- JAVA8 HashMap 新特性
1. 链表解决冲突的方式: java中处理Hash散列后的冲突使用的是链表法: java8之前只是使用的简单Entry链表存储键值对.java8后,在Entry队列的长度大于8之后,会自动 ...
- JVM 参数设置
YGC FGC 都会影响程序的运行,中断程序,JVM参数调整比较复杂,现在记录了一下平时常用的JVM参数: jar 包启动: usr/java/bin/java -jar -Xms2560m -Xmx ...
- RMAN-06217: not connected to auxiliary database with a net service name
RMAN> duplicate target database to clonedb from active database; Starting Duplicate Db at 28-JAN- ...
- C++中的输入参考
1.输入输出 1)operator>> 参考:cplusplus.com Extracts characters from is and stores them in s as a c-s ...
- cvc-complex-type.2.4.c: The matching wildcard...
在家里的电脑好好的,在单位的就不行,需要把web app libraties提到 最前面,然后clean一下项目
- PHP中的date函数中时区问题
从php5.1.0开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的,也就是显示的时间(无论用什么php命令)都是格林威治标准时间,所以才会有这个情况发生 解决方法如下 ...
- Spring Boot启动过程(一)
之前在排查一个线上问题时,不得不仔细跑了很多遍Spring Boot的代码,于是整理一下,我用的是1.4.3.RELEASE. 首先,普通的入口,这没什么好说的,我就随便贴贴代码了: SpringAp ...
- .Net多线程编程—误用点分析
1 共享变量问题 错误写法: 所有的任务可能会共享同一个变量,所以输出结果可能会一样. public static void Error() { ;i<;i++) { Task.Run(() = ...