主页 > 原创 > 从Let’s encrypt获取免费ssl证书

从Let’s encrypt获取免费ssl证书

Let’s encrypt已经开始公开测试,不需要再等邀请邮件。证书申请非常简单便捷,只需一个命令,不需要插件,可以很快的获取并绑定到 nginx等其他任何web服务器。

验证前准备

1. 将域名如 lets-encrypt.xdty.org 指向到你的操作机器ip。可以使用

nslookup lets-encrypt.xdty.org 8.8.8.8

来验证域名解析是否正确,注意如果使用dnspod的域名解析服务可能会出现8.8.8.8不能解析的问题。

2. 配置 nginx,使80端口指向到可访问的目录

mkdir /var/www/lets-encrypt
server {
    listen       80;
    server_name  lets-encrypt.xdty.org;
    charset utf-8;
   
    root /var/www/lets-encrypt;
    access_log  /var/log/nginx/$host.access.log;
    location / {
    }
}
service nginx reload

打开 lets-encrypt.xdty.org 测试,确保可以正确访问到目录。

下载 ACME 客户端
这个客户端是 Let’s encrypt 官方开发的客户端,用于域名验证和证书获取。

git clone --depth 1 https://github.com/letsencrypt/letsencrypt
cd letsencrypt

认证域名及颁发证书

./letsencrypt-auto certonly --webroot -w /var/www/lets-encrypt/ -d lets-encrypt.xdty.org --email webmaster@xdty.org --agree-tos

其中 certonly 表示只获取证书而不去更改web服务器配置,webroot表示使用网页目录验证域名,-w 指定域名绑定的目录,-d指定域名,可以包含多个-d和-w参数,多个-d参数可以用于生成多域名证书。 –email表示用于恢复的邮箱,可以使用任意邮箱地址,–agree-tos表示接受许可协议。

稍等片刻即会获得如下信息,表示获取证书成功

Updating letsencrypt and virtual environment dependencies.......
Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt certonly --webroot -w /var/www/lets-encrypt/ -d lets-encrypt.xdty.org --email webmaster@xdty.org --agree-tos

IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to webmaster@xdty.org.
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/lets-encrypt.xdty.org/fullchain.pem. Your
   cert will expire on 2016-03-06. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let'
s Encrypt
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Let's
   Encrypt so making regular backups of this folder is ideal.
 - If 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

更新nginx配置,启用https

server {
    listen       80;
    listen       443 ssl;
    listen       [::]:80;
    listen       [::]:443 ssl;
    server_name  lets-encrypt.xdty.org;
    ssl_certificate /etc/letsencrypt/live/lets-encrypt.xdty.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/lets-encrypt.xdty.org/privkey.pem;

    charset utf-8;

    root /var/www/lets-encrypt;

    access_log  /var/log/nginx/$host.access.log;

    location / {
    }
}
service nginx reload

访问 https://lets-encrypt.xdty.org 查看浏览器是否显示绿锁图标。检查证书详情可以看到没有任何的地址、邮件等个人信息。

更新证书及添加多域名
再次运行获取命令即可更新证书。

./letsencrypt-auto certonly --webroot -w /var/www/lets-encrypt/ -d lets-encrypt.xdty.org --email webmaster@xdty.org --agree-tos --renew-by-default

如再添加 lets-encrypt2.xdty.org lets-encrypt3.xdty.org 两个域名,

只需要多个 -d 参数指定域名即可生成一个多域名的证书,证书详情中的”certificate subject alternative name”会出现多个域名。同样注意新的域名要配置好nginx指向目录。如果目录不同,需要使用多个-w指定目录

更新 nginx server_name 配置

server_name  lets-encrypt.xdty.org lets-encrypt2.xdty.org lets-encrypt3.xdty.org;

重新加载配置

service nginx reload

签发证书

./letsencrypt-auto certonly --webroot -w /var/www/lets-encrypt/ -d lets-encrypt.xdty.org -d lets-encrypt2.xdty.org -d lets-encrypt3.xdty.org --email webmaster@xdty.org --agree-tos --renew-by-default

出现如下提示表示多域名证书签发成功

Updating letsencrypt and virtual environment dependencies.......
Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt certonly --webroot -w /var/www/lets-encrypt/ -d lets-encrypt.xdty.org -d lets-encrypt2.xdty.org -d lets-encrypt3.xdty.org --email webmaster@xdty.org --agree-tos --renew-by-default

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/lets-encrypt.xdty.org/fullchain.pem. Your
   cert will expire on 2016-03-06. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
 - If 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
service nginx reload

访问 https://lets-encrypt2.xdty.org https://lets-encrypt3.xdty.org 检查多域名证书。注意,如果出现证书错误还是之前的单域名证书,多刷新两次,这个应该是浏览器的缓存。

检查证书详情中的”certificate subject alternative name”,可以看到内容变为了

Not Critical
DNS Name: lets-encrypt.xdty.org
DNS Name: lets-encrypt2.xdty.org
DNS Name: lets-encrypt3.xdty.org

Tags: Let's encrypt https nginx ssl 多域名证书 证书

评论:11

  1. fishman 回复
    2015 年 12 月 22 日 于 上午 11:43

    为什么我下载了客户端后执行./letsencrypt-auto那一句,并没有出现你那样提示成功的界面。而是安装一堆必要组件后出现 Nothing to do
    WARNING: Python 2.6 support is very experimental at present…
    if you would like to work on improving it, please ensure you have backups
    and then run this script again with the –debug flag!

    执行多次都一样,我用你写的那个自动脚本能成功,但是有两个crt,两个key,一个pem文件,不知道在Nginx里要设置哪两个?我设置一个lets-encrypt-x1-cross-signed.pem,一个 example.chained.crt结果nginx都启动不了了。。。请问我要怎么解决?

    • tianyu 回复
      2015 年 12 月 22 日 于 下午 1:13

      letsencrypt-auto 脚本输出已经说的很清楚 WARNING: Python 2.6,是不是应该尝试升下级或者用 –debug参数看看错误细节。

      至于自动脚本,那个在RAEDME也说的很清楚,用的 letsencrypt-tiny 不需要额外的依赖。

      我建议你操作前仔细读一读 README, 修改配置文件为你的参数,这样域名.key就是私钥,域名.chained.crt就是证书

  2. zhang 回复
    2016 年 2 月 8 日 于 上午 12:54

    用你的一键包为何无法打开网站

    • tianyu 回复
      2016 年 2 月 8 日 于 上午 9:13

      需要打开哪个网站吗?具体什么错误?

      • zhang 回复
        2016 年 2 月 8 日 于 上午 11:35

        安装了证书后我的就无法打开了,像没有解析一样。你的站点没有邮件通知?

        • tianyu 回复
          2016 年 2 月 8 日 于 下午 4:42

          有邮件通知的,这个脚本应该不会影响到解析的

          • zhang
            2016 年 2 月 8 日 于 下午 5:57

            带s无法解析,不带s正常解析

  3. Qa 回复
    2016 年 7 月 11 日 于 下午 4:04
    • tianyu 回复
      2016 年 7 月 14 日 于 下午 2:17

      不好意思,才发现评论插件出了点问题,看不到内容。刚才修改好了,请重新提交下,谢谢

  4. 破影 回复
    2016 年 10 月 25 日 于 上午 11:35

    求助博主指路,用了letsencrypt.sh一键脚本生成CSR出错,找不到原因
    Generate CSR…v2cu.csr
    error on line -1 of /dev/fd/63
    3073771784:error:02001002:system library:fopen:No such file or directory:bss_file.c:175:fopen(‘/dev/fd/63′,’rb’)
    3073771784:error:2006D080:BIO routines:BIO_new_file:no such file:bss_file.c:178:
    3073771784:error:0E078072:configuration file routines:DEF_LOAD:no such file:conf_def.c:195:

  5. 牧羊人 回复
    2016 年 11 月 26 日 于 下午 6:18

    先收藏,装 py 的 时候卡住了。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注