简介
Let's Encrypt 是一个免费、开放,自动化的证书颁发机构,由 ISRG(Internet Security Research Group)运作。ISRG 是一个关注网络安全的公益组织,其赞助商包括 Mozilla、Akamai、Cisco、EFF、Chrome、IdenTrust、Facebook等公司。ISRG 的目的是消除资金和技术领域的障碍,全面推进网站从HTTP到HTTPS过度的进程。
目前,包括FireFox、Chrome在内的主流浏览器都支持Let's Encrypt证书,已经有不少用户在真实项目中使用Let's Encrypt证书。Let's Encrypt免费SSL证书的有效期是90天,到期后可以再续期,这样也就可以变相长期使用了。
官方网站:https://letsencrypt.org/
项目主页:https://github.com/letsencrypt/letsencrypt
使用
1. 获取Let's Encrypt免费SSL证书
首先,我们需要从 https://github.com/letsencrypt/letsencrypt
上下载 letsencrypt-auto 脚本,
使用它能够很方便地完成域名验证和SSL证书的获取。
# 使用git下载脚本
$ git clone https://github.com/letsencrypt/letsencrypt
# 进入到脚本所在目录
$ cd letsencrypt
# 查看 letsencrypt-auto 工具的用法
$ ./letsencrypt-auto --help
这里只对几个重要的命令参数进行说明:
参数名 | 解释说明 |
---|---|
run | 获取并安装证书到当前的Web服务器 |
certonly | 获取或续期证书,但是不安装 |
renew | 在证书快过期时,续期之前获取的所有证书 |
-d DOMAINS | 一个证书支持多个域名,用逗号分隔 |
--apache | 使用 Apache 插件来认证和安装证书 |
--standalone | 运行独立的 web server 来验证 |
--nginx | 使用 Nginx 插件来认证和安装证书 |
--webroot | 如果目标服务器已经有 web server 运行且不能关闭,可以通过往服务器的网站根目录放置文件的方式来验证 |
--manual | 通过交互式方式,或 Shell 脚本手动获取证书 |
关于域名验证和证书的获取安装,上面提到了5种方式:--apache, --standalone, --nginx, --webroot 和 --manual,请根据实际情况选择其一。再次重申,笔者使用的是公司的其中一台测试机,上面没有跑 Apache 和 Nginx,单独运行的 Tomcat,然后通过 iptables 进行端口转发(将 80 端口的请求转发到 8080,将 443 端口的请求转发到 8443),并且已完成域名解析。因此,笔者选择采用 --standalone 方式进行域名验证和证书获取。
2.获取证书
./letsencrypt-auto certonly --standalone --email xxxxxxx@qq.com -d quqianzhao.top -d www.quqianzhao.top
1.注意将上面的邮箱和域名替换成自己的。上面命令中的 certonly 表示只获取证书,不安装;-d 有两个,表示将要获取的SSL证书绑定两个域名。
2.上面的命令在执行过程中,会有两次确认。命令执行完成后,如果看到提示信息"Congratulations! Your certificate and chain..."就说明证书创建成功了,如下图所示。
/etc/letsencrypt/live/
3.Tomcat7配置Let's Encrypt免费SSL证书
从上图(证书获取成功的提示信息)可以看出,获取到的 Let's Encrypt 证书保存在 /etc/letsencrypt/live/域名名称/ 目录下,相关的证书文件有4个:
cert.pem
chain.pem
fullchain.pem
privkey.pem
我们需要用到的是后面两个证书文件: fullchain.pem 和 privkey.pem。接下来,还需要用到 Linux 下的 openssl 和 keytool 工具,将SSL证书由 .pem 格式转换成 Tomcat 所支持的 .jks 格式。
4.导出.p12格式的证书
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out zyxx_letsencrypt.p12 -name tomcat_letsencrypt
5.再将证书由.p12格式转换成.jks格式
keytool -importkeystore -deststorepass 'zxxx_123' -destkeypass 'zxxx_123' -destkeystore zyxx_letsencrypt.jks -srckeystore zyxx_letsencrypt.p12 -srcstoretype PKCS12 -srcstorepass 'zxxx_123' -alias tomcat_letsencrypt
说明:执行 openssl 命令导出 .p12 格式证书时会要求设置密钥,执行 keytool 命令时也有3处要写密钥,最简单的方式就是所有需要密钥的地方,都使用同一个,这样也不会搞混。
经过上面的两步操作,
/etc/letsencrypt/live/域名名称/ 目录下就生成了一个新的证书 zyxx_letsencrypt.jks。
接下来,修改 %tomcat%/conf/server.xml 文件,
添加 keystoreFile 和 keystorePass 两行配置。
其中,keystoreFile 指向 jks 证书文件,而 keystorePass 则为证书的密钥。
6.修改后的关键配置如下:
<Connector
port="8443"
protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keystoreFile="/home/test/zyxx_letsencrypt.jks"
keystorePass="zxxx_123"/>
7.查看的到期时间
./certbot-auto certificates
8.模拟更新证书
./certbot-auto renew –dry-run
9.更新证书
./certbot-auto renew
网友评论