Let's Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它的来头不小,由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起,目的就是向网站自动签发和管理免费证书,以便加速互联网由HTTP过渡到HTTPS,目前Facebook等大公司开始加入赞助行列。
Let's Encrypt已经得了 IdenTrust 的交叉签名,这意味着其证书现在已经可以被Mozilla、Google、Microsoft和Apple等主流的浏览器所信任,你只需要在Web 服务器证书链中配置交叉签名,浏览器客户端会自动处理好其它的一切,Let's Encrypt安装简单,未来大规模采用可能性非常大。
Let's Encrypt虽然还在测试当中,但是市场需求非常大,已经有非常多的朋友迫不及待地安装并用上了Let's Encrypt。Let's Encrypt向广大的网站提供免费SSL证书,不管是对于网站站长、互联网用户,还是对整个Web互联网,都是非常有利的,它有利于整个互联网的安全。
本篇文章就来为大家讲解一下如何获取Let's Encrypt免费SSL证书,并附上Apache的SSL证书配置方法。
一、 安装Let's Encrypt免费SSL准备
1.Let's Encrypt官网:
官方网站:https://letsencrypt.org/
项目主页:https://github.com/letsencrypt/letsencrypt
2.安装Let's Encrypt脚本依赖环境:(这一部分可以跳过,因为官方提供的Let's Encrypt脚本会自动检测并安装)
$ apt-get install git
二、获取Let's Encrypt免费SSL证书
1.获取Let's Encrypt免费SSL证书很简单,你只需要执行以下命令,就会自动在你的VPS上生成SSL证书和私钥。
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto
如果只想生成证书,则最后一句使用如下命令(貌似我目前只能用下面的命令,用上面的命令会报错):
$ ./letsencrypt-auto certonly
2.执行上述命令后,会弹出对话框,同意用户协议。
3.接着会提示让你关闭Nginx或者Apache。
4.Let's Encrypt需要用到80和443端口,所以你需要关闭那些占用这两个端口的应用。
5.当你看以下内容时,就表明你的Let's Encrypt免费SSL证书获取成功了。
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/www.mobibrw.com/fullchain.pem. Your cert will
expire on 2016-04-25. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
- If you like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
注意: 目前阿里云的服务器域名解析不支持DNS Certification Authority Authorization (CAA) Resource Record
,导致在进行签名的时候返回如下错误信息:
Failed authorization procedure. mobibrw.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: DNS problem: query timed out looking up CAA for mobibrw.com
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: mobibrw.com
Type: urn:acme:error:connection
Detail: DNS problem: query timed out looking up CAA for mobibrw.com
目前还没有解决方法,具体的讨论参考 DNS query timeout #1610
目前根据提交给阿里云的工单,今天2016年1月26日已经正式支持了Let's Encrypt,目前验证,一切正常了。
三、证书续期
Let's Encrypt有多种方法来验证你是否是域名的所有人,而acme-tiny
这个小工具用的是最简单的方法,也就是利用http
文件验证。
简单来说,就是生成一个验证文件,放在http://www.mobibrw.com/.well-known/acme-challenge/
下,Let's Encrypt官方验证这个文件是否存在、内容是否正确。如果一切正确,说明域名是你所有。因此我们下面的脚本中会出现创建,删除.well-known/acme-challenge/
这个目录的动作。
1.生成证书自动化请求脚本
$ sudo vim /root/renew-ssl.sh
里面内容如下:
#!/bin/bash
mkdir -p /var/www/wordpress/.well-known/acme-challenge
/root/letsencrypt/letsencrypt-auto --renew-by-default certonly --email wangqiang1588@sina.com -d www.mobibrw.com -d mobibrw.com --webroot -w /var/www/wordpress --agree-tos
service apache2 reload
rm -rf /var/www/wordpress/.well-known
2.赋予脚本执行权限
$ sudo chmod +x /root/renew-ssl.sh
3.脚本添加到计划任务,每隔60天执行一次
$ sudo crontab -e
在文件的最后增加
0 3 */60 * * /root/renew-ssl.sh
4.查看是否添加成功
$ sudo crontab -l
5.重启cron
服务
$ sudo service cron restart
四、需要注意的问题
目前(2022/02/27)最新的1.23.0版本,在生成/更新证书的时候,会提示用户是否全站都迁移到HTTPS。如果不小心同意了这个选项,对于Apache服务器来说,会在配置文件中增加如下内容:
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.xxx.com [OR]
RewriteCond %{SERVER_NAME} =xxx.com [OR]
RewriteCond %{SERVER_NAME} =xxxxx.com [OR]
RewriteCond %{SERVER_NAME} =www.xxxxx.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
这个配置会覆盖我们在网站目录下的HTTPS相关设置(.htaccess),如果我们配置网站某个目录下的文件可以不通过HTTPS进行访问,那么需要手工移除这些自动生成的配置信息,然后重启Apache服务。
参考链接