沙滩星空的博客沙滩星空的博客

申请安装和续期https协议SSL证书(nginx)

Let's Encrypt和ACME 协议

部署 HTTPS 网站时需要证书,证书由 CA 机构签发,大部分传统 CA 机构签发证书需要收费。
Let’s Encrypt 也是一个 CA 机构,但这个 CA 机构是免费的!!!
为了控制开支,避免传统的大量人工操作,这个非盈利性组织CA机构,设计了一个 ACME协议
该协议规范化了证书申请、更新、撤销等流程,客户端通过该协议,可以向 Let’s Encrypt 申请证书,完全自动化操作的。

任何人都可以基于 ACME协议 实现一个客户端,官方推荐的客户端是Certbot


使用certbot代替acme.sh免费申请wildcard通配符证书和自动更新实践小结 https://zhuanlan.zhihu.com/p/108052155


acme.sh

acme.sh 实现了 acme协议, 可以从 let's encrypt 生成免费证书。

特点:

  1. 一个纯粹用Shell(Unix shell)语言编写的ACME协议客户端。
  2. 完整的ACME协议实施。 支持ACME v1和ACME v2 支持ACME v2通配符证书
  3. 简单,功能强大且易于使用。你只需要3分钟就可以学习它。
  4. Let's Encrypt免费证书客户端最简单的shell脚本。
  5. 纯粹用Shell编写,不依赖于python或官方的Let's Encrypt客户端。
  6. 只需一个脚本即可自动颁发,续订和安装证书。 不需要root/sudoer访问权限。
  7. 支持在Docker内使用,支持IPv6

操作命令

查看证书列表

acme.sh --list

删除证书

acme.sh remove Main_Domain

查看帮助

acme.sh --help

1.安装acme.sh

curl https://get.acme.sh | sh

安装过程中会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书(可执行crontab -l 查看)。

00 00 * * * root /root/.acme.sh/acme.sh --cron --home /root/.acme.sh &>/var/log/acme.sh.logs

定时任务路径: /var/spool/cron/root

2.申请&下载证书

acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证

HTTP 方式

acme.sh --issue -d chandao.test.com --webroot /data/wwwroot/chandao

只需要指定域名, 并指定域名所在的网站根目录【命令中/data/wwwroot/chandao为域名的根目录路径】. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.

dns手动模式:不能自动更新证书。在续订证书时,您必须手动向域中添加新的txt记录。
注: dns模式不需要验证网站根目录的文件,故不要添加--webroot选项,否则程序会自作聪明地生成文件并验证。

# 生成DNS的TXT记录值
/root/.acme.sh/acme.sh --issue -d abc.com.cn --home /mnt/www/ssl --server letsencrypt --dns \
--yes-I-know-dns-manual-mode-enough-go-ahead-please --debug
# 把上一步生成的TXT记录值,手动填写到域名解析列表中。然后执行续期
/root/.acme.sh/acme.sh --renew -d abc.com.cn --home /mnt/www/ssl --server letsencrypt \
--yes-I-know-dns-manual-mode-enough-go-ahead-please --debug

https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode

3.安装证书

使用 --installcert--install-cert 命令,并指定目标位置, 证书文件会被copy到相应的位置。
默认情况下,证书将每60天更新一次(可配置)。

NGINX

acme.sh --installcert -d chandao.test.com --key-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key --fullchain-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer --reloadcmd "service nginx force-reload"

APACHE

acme.sh --install-cert -d chandao.test.com \
--cert-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key \
--key-file /path/to/keyfile/in/apache/key.pem \
--fullchain-file /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer \
--reloadcmd      "service apache2 force-reload"

更新证书后,将通过以下命令自动重新加载Apache / Nginx服务:

service apache2 force-reload

service nginx force-reload

4.安装(配置)NGINX 证书

server {
  listen 80;  #如果硬性要求全部走https协议,这一行去除
  listen       443 ssl http2;    #如果硬性要求全部走https协议,这里去除ssl
  server_name chandao.test.com;
  access_log off;
  index index.html index.htm index.php;
  root /data/wwwroot/chandao;

  #ssl on;   #如果硬性要求全部走https协议,这里开启ssl on
  ssl_certificate   /usr/local/nginx/ssl_cert/test.com/chandao.test.com.cer;
  ssl_certificate_key  /usr/local/nginx/ssl_cert/test.com/chandao.test.com.key;

  #ssl性能调优
  #nginx 1.13.0支持了TLSv1.3,TLSv1.3相比之前的TLSv1.2、TLSv1.1等性能大幅提升
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 10m;
  #使用ssl_session_cache优化https下Nginx的性能
  ssl_session_cache builtin:1000 shared:SSL:10m;
  #OCSP Stapling 开启。OCSP是用于在线查询证书吊销情况的服务,使用OCSP Stapling能将证书有效状态的信息缓存到服务器,提高 TLS 握手速度
  ssl_stapling on;
  #OCSP Stapling 验证开启
  ssl_stapling_verify on; 

  #error_page 404 /404.html;
  #error_page 502 /502.html;

  location ~ [^/]\.php(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
  }

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    expires 30d;
    access_log off;
  }
  location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
  }
  location ~ /\.ht {
    deny all;
  }
}

如果是自己手动安装的acme.sh,其默认路径为 ~/acme.sh/
LNMP环境把文件放在了 /usr/local/acme.sh/

cd /usr/local/acme.sh/
acme.sh --renew -d [域名]

certbot

一、获取https证书

如果是CentOS 6、7,先执行:

yum install epel-release
wget https://dl.eff.org/certbot-auto --no-check-certificate
chmod +x ./certbot-auto
./certbot-auto -n

./certbot-auto -n只是用来安装依赖包的,也可以跳过直接到下面的生成证书的步骤,国内VPS或服务器上使用的话建议先修改为国内的pip源。

单域名生成证书:以下的文件夹自定义

./certbot-auto certonly --email 你的邮箱 --agree-tos --no-eff-email --webroot -w /home/wwwroot/www.vpser.net(这个是文件夹名字,自定义,下同) -d www.vpser.net

多域名单目录生成单证书:(即一个网站多个域名使用同一个证书)

./certbot-auto certonly --email 你的邮箱 --agree-tos --no-eff-email --webroot -w /home/wwwroot/www.vpser.net -d www.vpser.net -d bbs.vpser.net

多域名多目录生成一个证书:(即一次生成多个域名的一个证书)

./certbot-auto certonly --email 你的邮箱 --agree-tos --no-eff-email --webroot -w /home/wwwroot/vpser.com -d wap.vpser.com -d seller.vpser.com -d staff.vpser.com -d admin.vpser.com -d api.vpser.com

提示

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/www.vpser.net/fullchain.pem. Your cert will
expire on 2019-11-25. To obtain a new or tweaked version of this
certificate in the future, simply run certbot-auto again. To
non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

就是生成成功。
生成的证书会存在:/etc/letsencrypt/live/www.vpser.net/ 目录下

二、nginx配置https映射

1.配置https

server {
  listen 443 ssl;
  server_name wap.vpser.com;
  location / {
    root /xxxx/xxxx/xxxx;
    index index.html index.php index.htm;
    client_max_body_size 500m;
    autoindex on;
  }
  ssl on;
  ssl_certificate /etc/letsencrypt/live/wap.vpser.com/fullchain.pem; #前面生成的证书,改一下里面的域名就行
  ssl_certificate_key /etc/letsencrypt/live/wap.vpser.com/privkey.pem; #前面生成的密钥,改一下里面的域名就行
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root html;
  }
}

2.将http映射到https

server {
  listen 80;
  server_name wap.vpser.com;
  location / {
    add_header Content-Type 'text/plain;';
    root /xxx/xxx/xxx;
    return 301 https://wap.vpser.com$request_uri;

  }

}

三、配置自动更新

执行代码:

crontab -e

添加定时器:

25 14 13 * * /root/certbot-auto renew --renew-by-default --renew-hook "/usr/nginx/sbin/./nginx -s reload"

手动更新LNMP创建的SSL证书 https://xyuxf.com/archives/1482
Linux下使用acme.sh 配置https 免费证书 https://www.cnblogs.com/-mrl/p/10601817.html
使用Certbot开启HTTPS访问 https://zhuanlan.zhihu.com/p/99360125
certbot https协议配置 https://www.cnblogs.com/guagua-19/p/10318832.html


其他SSL证书
https://freessl.cn/
https://keymanager.org/

未经允许不得转载:沙滩星空的博客 » 申请安装和续期https协议SSL证书(nginx)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址