前言

https协议一看就觉得逼格高端。很早时候就想做一个来玩玩了。
现在有机会了
感谢
咖菲猫-李常明笔记
certbot在Centos7上配置合法签名证书,实现nginx的https访问

本文其实就是 咖菲猫-李常明笔记 的笔记的读书笔记而已。

准备

certbot的官网地址:

https://certbot.eff.org/

然后你打开一下官网:

window系统Nginx配置ssl证书 nginx的ssl证书_html


window系统Nginx配置ssl证书 nginx的ssl证书_html_02

上面其实已经有相关指导了,
我选择的是 nginx + centos
看到下面的指导。。
我翻译一下算了:

安装

因为在centos里面没有可直接执行的打包过的cert bot 软件,所以目前的做法是,复制一份copy在本地编译安装。

wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto

执行上面几个,最后有:

window系统Nginx配置ssl证书 nginx的ssl证书_nginx_03


window系统Nginx配置ssl证书 nginx的ssl证书_nginx_04

开始配置

Certbot自带针对nginx的插件,可以针对众多平台自动执行ssl证书安装过程。

sudo /usr/local/bin/certbot-auto --nginx

如果你想体验手动的快感,手动修改配置,那么,好,执行命令时候添加参数"certonly"

$ sudo /usr/local/bin/certbot-auto --nginx certonly


然后后续过程请参考:
https://certbot.eff.org/docs/

说回自动安装的过程吧,

注意,要求填写域名时候,只能填写单域名不要填写范域名,是错的,会这样提示:

我填写的是 泛域名,譬如: *.123site.com 第一个表示匹配所有二级域名。

window系统Nginx配置ssl证书 nginx的ssl证书_nginx_05


提示:这部分错误.

正确的是:

IMPORTANT NOTES:
 - Unable to install the certificate
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/www.freedom_plus.club/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/www.freedom_plus.club/privkey.pem
   Your cert will expire on 2019-09-04. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again with the "certonly" option. To non-interactively renew *all*
   of your certificates, run "certbot-auto renew"

已经生成以后,那么配置那一部分这样来

首先,看看生成的key都有哪些:

ls /etc/letsencrypt/live/www.freedom_plus.com/

看到:

window系统Nginx配置ssl证书 nginx的ssl证书_html_06


好了,在nginx.conf里面添加

参考: 咖菲猫-李常明笔记

的配置

server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  kafeimao.com;
        ssl           on;
        ssl_certificate "/etc/letsencrypt/live/kafeimao.com/fullchain.pem";
        ssl_certificate_key "/etc/letsencrypt/live/kafeimao.com/privkey.pem";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                root  /usr/share/nginx/html/kafeimao.com;
                index  index.html;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
  }

http协议重定向

注意,为了原本的80端口即http的普通协议能够转换到https这边来,可以添加这一条规则:

## http move to https
server {
listen    80;
server_name domain.com;
return    301 https://$server_name$request_uri;
}

好了,不过我们有些文件,譬如静态资源,js gif等等是要直接访问硬盘,不需要代理的,这时候这样做

## https里面直接代理静态资源
server {
listen    443;
server_name domain.com;
      location ~/(javascript|css|images|res|static|statics|templates){
      root /home/root/web/static/;
       expires      7d;

      }

# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}

## 下面代理转发php网站或java网站
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8080/;
    }

}

定期更新

首先,尝试执行:

sudo /usr/local/bin/certbot-auto renew --dry-run

如果执行成功,那么就可以用:

/usr/local/bin/certbot-auto renew

来手动更新,推荐用下面代码每两天检查一下更新:

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renew

下面添加定时任务:

crontab -e

打开定时任务编辑器
添加内容:

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renew

保存,然后使用:

crontab -l -u root

查看是否添加了,然后,

/sbin/service crond start
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload

请重启定时任务