酆都城主

博客园 首页 联系 订阅 管理

Let’s Encrypt是一个免费,自动化,和 公开 的证书颁发机构,并且可以通过脚本实现证书的更新。

 

本次使用的是阿里云的centos服务器

前提条件

服务器需要有python和git

检查python 

python --version 

检查git

git --version

生成证书

1、从git上clone encrypt

git clone https://github.com/certbot/certbot

2、进入到certbot的目录生成证书

./letsencrypt-auto certonly --standalone --email xiaoweiv@yeah.net -d xx.vip -d www.xx.vip

Let's Encrypt可以支持多域名的配置

执行成功的情况下,会在/etc/letsencrypt/live/xx.vip目录下生成四个文件 cert.pem  chain.pem  fullchain.pem  privkey.pem

cert.pem - Apache服务器端证书
chain.pem - Apache根证书和中继证书
fullchain.pem - Nginx所需要ssl_certificate文件
privkey.pem - 安全证书KEY文件

配置nginx

1、进入nginx配置文件目录

/usr/local/nginx/conf

2、修改nginx.conf文件

 1 # HTTPS server
 2     #
 3     server {
 4         listen       443;
 5         server_name  xx.vip www.xx.vip;
 6         ssl on;
 7 
 8         ssl_certificate      "/etc/letsencrypt/live/xx.vip/fullchain.pem";
 9         ssl_certificate_key  "/etc/letsencrypt/live/xx.vip/privkey.pem";
10 
11         ssl_session_cache    shared:SSL:1m;
12         ssl_session_timeout  5m;
13 
14         ssl_ciphers  HIGH:!aNULL:!MD5;
15         ssl_prefer_server_ciphers  on;
16 
17         location / {
18             root   html/love;
19             index  index.html index.htm;
20         }
21                 location /zuimeidenvren {
22             root   html;
23             index  index.html index.htm;
24         }
25 
26     }

至此,我们就完成了HTTPS的配置工作。重新加载nginx的配置使其生效

/usr/local/nginx/sbin/nginx -s reload

 

设置自动更新证书

1、编写更新的shell脚本

 1 #!/bin/sh
 2 
 3 #先停止nginx
 4 . /etc/init.d/functions
 5 
 6 NGINX_DIR="/usr/local/nginx"
 7 NGINX="${NGINX_DIR}/sbin/nginx"
 8 NGINX_CONF="${NGINX_DIR}/conf/nginx.conf"
 9 PROG=$(basename $NGINX)
10 
11 if [ ! -x ${NGINX} ]; then
12     echo -n $"${NGINX} does not exists."; warning; echo
13     exit 5
14 fi
15 echo $PROG
16 echo "stop nginx"
17 pkill $PROG
18 echo "ngix stop success and update ssl "
19 #更新证书
20 /data/git/certbot/certbot-auto renew --force-renew
21 #启动nginx
22 echo "start nginx"
23 $NGINX -c $NGINX_CONF
24 echo "nginx status"
25 pids=`ps -ef|grep nginx`
26 
27 if [ "$pids" = "" ]
28    then
29        echo "no nginx pid!"
30 else
31   echo "nginx Id list :$pids"
32 fi
33 exit 0;

2、修改crontab进行定时更新

0 0 10 * * root /etc/letsencrypt/live/xx.vip/updatessl.sh

3、从证书的信息中看,let`s Encrypt的有效期为90天

遇到的问题

1、生成证书时报 Problem binding to port 80: Could not bind to IPv4 or IPv6.. Skipping

  这是因为原来nginx启动的情况下进行证书的生成时,80端口被使用了。停止nginx的服务

2、配置了nginx后,有错误 unknown directive ssl, 提示

  这是在我第一次安装编译nginx时没有配置SSL模块导致的

  (1)进入到nginx的解压目录  cd /data/software/nginx-1.15.0

  (2)执行命令 ./configure --with-http_ssl_module  //重新添加这个ssl模块

  (3)执行make命令(不要执行make install,因为make是用来编译的,而make install是安装,不然你整个nginx会重新覆盖的)。

  (4)备份之前的nginx 

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

    拷贝最新的(如果失败,可以使用 cp -rpf)  

 cp objs/nginx /usr/local/nginx/sbin/nginx

  (5)在nginx的安装目录下 /usr/local/nginx/sbin下执行命令 ./nginx -V

 

参考

https://www.jianshu.com/p/eaad77ed1c1b

posted on 2019-06-14 11:15  酆都城主  阅读(1958)  评论(0编辑  收藏  举报