HTTPS已经成为当今网站的标准配置,为网站提供加密和身份验证功能。但是申请和维护SSL证书一直是一个繁琐的过程。幸运的是,Lego这个强大的工具可以帮助我们轻松地自动化获取和更新Let’s Encrypt免费SSL证书。

Lego 简介

Lego是一个用Go语言编写的Let’s Encrypt客户端,它可以帮助我们自动化完成SSL证书的申请、验证和更新过程。相比于其他工具,Lego的优势在于:

  • 支持多种验证方式,包括HTTP和DNS验证
  • 集成了众多DNS服务商的API,可以自动完成DNS验证
  • 使用简单,只需几个命令即可完成证书申请
  • 支持通配符证书

安装 Lego

  • mac
    1
    brew install lego
  • docker
    1
    docker run goacme/lego -h

签发rout53证书

  1. 配置AWS密钥
    1
    2
    3
    export AWS_ACCESS_KEY_ID=xxx
    export AWS_SECRET_ACCESS_KEY=xxx
    export AWS_REGION=us-east-1
  2. 生成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. 可生成泛域名证书,以腾讯云为例
    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证书

  1. 将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
  2. 验证jks
    1
    keytool -list -v -keystore jenkins.douhua.com.jks
  3. 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