HTTPS已经成为当今网站的标准配置,为网站提供加密和身份验证功能。但是申请和维护SSL证书一直是一个繁琐的过程。幸运的是,Lego这个强大的工具可以帮助我们轻松地自动化获取和更新Let’s Encrypt免费SSL证书。
Lego 简介
Lego是一个用Go语言编写的Let’s Encrypt客户端,它可以帮助我们自动化完成SSL证书的申请、验证和更新过程。相比于其他工具,Lego的优势在于:
- 支持多种验证方式,包括HTTP和DNS验证
- 集成了众多DNS服务商的API,可以自动完成DNS验证
- 使用简单,只需几个命令即可完成证书申请
- 支持通配符证书
安装 Lego
1
| docker run goacme/lego -h
|
签发rout53证书
- 配置AWS密钥
1 2 3
| export AWS_ACCESS_KEY_ID=xxx export AWS_SECRET_ACCESS_KEY=xxx export AWS_REGION=us-east-1
|
- 生成ssl证书
1
| lego --email xhuaustc@gmail.com --domains jenkins.douhua.com --dns route53 --accept-tos --dns.disable-cp --path ~/.lego/jenkins run
|
证书将保存在 ~/.lego/jenkins 目录下。
- 其中email用来接收证书快过期时的提示
- lego支持多种dns provider, 如:阿里云,腾讯云,Route53等
- 对于不同的证书,需要指定不同的path目录
- 可生成泛域名证书,以腾讯云为例
1 2 3
| export TENCENTCLOUD_SECRET_ID=your_secret_id export TENCENTCLOUD_SECRET_KEY=your_secret_key lego --email xhuaustc@gmail.com --domains douhua.com --domains *.douhua.com --dns tencentcloud --accept-tos --dns.disable-cp --path ~/.lego/tencent/jenkins run
|
对于一些java应用需要jks证书
- 将ssl证书转为jks
1 2
| openssl pkcs12 -export -in domain.crt -inkey domain.key -out certificate.p12 -name jenkins keytool -importkeystore -srckeystore certificate.p12 -srcstoretype PKCS12 -destkeystore jenkins.douhua.com.jks -deststoretype JKS
|
过程中需要输入密码。密码也可以通过命令行指定
1 2
| openssl pkcs12 -export -in domain.crt -inkey domain.key -out certificate.p12 -name "jenkins" -password pass:yourpassword keytool -importkeystore -srckeystore certificate.p12 -srcstoretype PKCS12 -destkeystore jenkins.douhua.com.jks -deststoretype JKS -srcstorepass yourpassword -deststorepass yourpassword
|
- 验证jks
1
| keytool -list -v -keystore jenkins.douhua.com.jks
|
- jenkins中配置证书
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| $ cat /etc/jenkins/jenkins.conf JENKINS_WAR=/opt/jenkins/jenkins.war
JENKINS_HOME=/opt/jenkins/data
JAVA_ARGS="-Djava.awt.headless=true \ -Djava.net.preferIPv4Stack=true \ -XX:+AlwaysPreTouch \ -XX:+UseG1GC \ -Xms8192m \ -Xmx8192m \ -Xss127m \ -Xlog:gc*=debug:file=gclog.log:utctime,level,tags:filecount=9,filesize=1M"
JENKINS_ARGS="--httpPort=-1 --httpsPort=8800 --logfile=/var/log/jenkins/jenkins.log \ --httpsKeyStore=/opt/jenkins/jenkins.douhua.com.jks \ --httpsKeyStorePassword=xxxxxx \ --useJmx"
$ /usr/bin/java $JAVA_ARGS -jar $JENKINS_WAR $JENKINS_ARGS
|
更新route53证书
当证书有效期在30天以内,可以使用renew更新证书
1
| lego --email xhuaustc@gmail.com --domains jenkins.douhua.com --dns route53 --accept-tos --dns.disable-cp --path ~/.lego/jenkins renew
|