阿里云centos环境之Let's Encrypt SSL证书配置

巧了我就是萌 提交于 2020-02-18 14:58:52

阿里云centos环境之Let's Encrypt SSL证书配置<十一>
1.目标
Let's Encrypt是国外一个公共的免费SSL项目。这里记录的是可执行的生成免费SSL证书Let’s Encrypt证书的过程。是手动配置的的流程。Python版本要求是2.7以上。

Python版本查看:

python -V
结果是:Python 2.7.5

操作系统信息查看:
cat /etc/redhat-release
结果是:CentOS Linux release 7.4.1708 (Core) 

2.证书生成
进入/home/soft/ssl目录。没有目录的可自行创建。
执行命令

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly --manual -d cas.zjclxny.com --email chenyuan122912@sina.com
其中最后一条命令:“--manual”是指定手动配置。"-d"指定域名,“--email”指定我的邮件,用户接收Let's Encrypt的邮件通知。


执行结果如下:

1.Are you OK with your IP being logged?

填“Y”

2.

-------------------------------------------------------------------------------
Create a file containing just this data:
 
qrRbH9D69MdgXfBiNCPXKFaBw_-3nT0OJ-cpzMfUIh8.Dbly8kd-5TCo6km7-P5pyqBAeX70VPxt-UA2d9OrJCc
 
And make it available on your web server at this URL:
 
http://cas.zjclxny.com/.well-known/acme-challenge/qrRbH9D69MdgXfBiNCPXKFaBw_-3nT0OJ-cpzMfUIh8
确保访问http://cas.zjclxny.com/.well-known/acme-challenge/qrRbH9D69MdgXfBiNCPXKFaBw_-3nT0OJ-cpzMfUIh8域

名有访问到值。不论你用什么技术做服务器。(当然必需在生成证书的服务器上)

这里可以使用nginx做代理服务器,端口是80,这个“.well-known/acme-

challenge/qrRbH9D69MdgXfBiNCPXKFaBw_-3nT0OJ-cpzMfUIh8”目录需要自己创建,内容就

是“qrRbH9D69MdgXfBiNCPXKFaBw_-3nT0OJ-cpzMfUIh8.Dbly8kd-5TCo6km7-P5pyqBAeX70VPxt-UA2d9OrJCc”。每

次生成证书这些值都不一样的。

其实只要在指定服务器上,能正常访问url即可。使用什么做web服务器都可以。

3.证书位置
所有版本已申请的证书放在 /etc/letsencrypt/archive下,/etc/letsencrypt/live是指向最新版本的符号链接。web server中关于

证书的配置建议指向 live 目录下的文件,以免证书更新后还需要更改配置。

每个域名一个目录,主要包含以下几个文件:

cert.pem 申请的服务器证书文件

privkey.pem 服务器证书对应的私钥

chain.pem 除服务器证书外,浏览器解析所需的其他全部证书,比如根证书和中间证书

fullchain.pem 包含服务器证书的全部证书链文件

证书申请成功后会提示证书的文件路径,以及证书到期时间

证书申请有频率限制

1.注册IP限制:每IP每3个小时不超过10次

2.域名数量限制:每个域名(包含子域名)每7天不超过5个

英文好的可直接参考官网限制说明:官网证书申请限制

4.证书安装
4.1.配置Nginx
1)生成2048位 DH parameters
sudo openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048
结果如下:

说明生成成功。

2)修改nginx.conf
server {
 
    listen 443 ssl;
 
    server_name www.saxieyu.com;
 
    ssl_certificate /etc/letsencrypt/live/www.saxieyu.com/fullchain.pem;
 
    ssl_certificate_key /etc/letsencrypt/live/www.saxieyu.com/privkey.pem;
 
    ssl_dhparam /etc/ssl/certs/dhparams.pem;
 
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
 
    ssl_prefer_server_ciphers  on;
 
    ……
 
}
说明:
listen 443 ssl:开启443端口监听
ssl_certificate:包含服务器证书的全部证书链文件
ssl_certificate_key:私钥的位置
ssl_dhparam:上面生成的2048位 DH parameters位置
ssl_ciphers:2048位 DH parameters里的值
ssl_prefer_server_ciphers为on表示开启

配置 http 强制跳转到 https:
server {
 
    listen 80;
 
    server_name www.saxieyu.com;
 
    return 301 https://$server_name$request_uri;
 
}
如果不这样设置会报
400 Bad Request
The plain HTTP request was sent to HTTPS port
错误。

重启nginx。在sbin目录 下执行“./nginx -s reload”。如果提示提示“nginx: [emerg] the "ssl" parameter requires ngx_http_module”错误,是因为nginx缺少http_ssl_module模块.
1.如果想重新安装nginx
在生成makefile,编译模块指定如下:
./configure
--with-pcre=/usr/local/pcre-8.39
--with-zlib=/usr/local/zlib-1.2.11
--with-openssl=/usr/local/openssl-1.0.1t
--with-http_stub_status_module 
--with-http_ssl_module
2.如果已经安装好nginx,不想重新安装
进入/usr/local/nginx/sbin/目录,执行
./nginx -V
查看目前已经安装的模块。

由于我已经安装了http_ssl_module模块,所以显示的比较多。

2.1)如果编译的源码存在的情况下,比如nginx-1.13.6,只要进入源码目录,执行
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
将http_ssl_module模块编译到现在模块中
执行
make
执行完毕后,不要进行make install,否则就是覆盖安装
然后备份原有已安装好的nginx
1.将整个/usr/local/nginx目录备份
2.杀死nginx进程,使用kill命令
3.进入源码目录nginx-1.13.6
执行
cp -r ./objs/nginx /usr/local/nginx/sbin/
4.再查看nginx已经安装的模块
./nginx -V
2.2如果源码已经删掉
1)再查看nginx已经安装的模块
./nginx -V
2)解压nginx-1.13.6.tar.gz
tar -zxvf nginx-1.13.6.tar.gz
进入目录

3)将已经安装的模块也编译一下
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --这里填入已经安装过的模块
4)执行完毕后,不要进行make install,否则就是覆盖安装,然后备份原有已安装好的nginx,将整个/usr/local/nginx目录备份
5).杀死nginx进程,使用kill命令
6).进入源码目录nginx-1.13.6
执行
cp -r ./objs/nginx /usr/local/nginx/sbin/
7).再查看nginx已经安装的模块
./nginx -V
最后重启nginx。
结果如下:


已经变成https协议了。完整配置如下:

nginx.conf
#user  nobody;
worker_processes  4;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       mime.types;
    include      vhost/*.conf;
    default_type  application/octet-stream;
 
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
    gzip_vary on;
    gzip_proxied   expired no-cache no-store private auth;
    gzip_disable   "MSIE [1-6]\.";
 
}
vhost目录下子配置如下clxny.conf:
 #服务器的集群  
    upstream  cas.com {  #服务器集群名字   
        server    www.xxxxny.com:8184;#服务器配置   weight=1是权重的意思,权重越大,分配的概率越大。  
        server    www.xxxxny.com:8182;
        server    youka.xxxxny.com:8185;
        ip_hash;  
    }
 
    server {
        listen 443 ssl;
        server_name  cas.xxxxny.com;
    return 301 https://$server_name$request_uri;
        #charset koi8-r;
    #    root /usr/local/www/xny/;
        #access_log  logs/host.access.log  main;
    ssl_certificate /etc/letsencrypt/live/cas.zjclxny.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/cas.zjclxny.com/privkey.pem;
       ssl_dhparam /etc/ssl/certs/dhparams.pem;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-EXXX...XXX:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_prefer_server_ciphers  on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
                                                                                                                                          
        location / {
            #proxy_pass http://netitcast.com;
            #proxy_set_header Host $http_host;
            #proxy_set_header X-Real-IP $remote_addr;
            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            root /usr/local/www/xny;
            index  index.html index.htm;
        }
 
        location = /50x.html {
            root   html;
        }
        
        
        
        location /app/ {
            proxy_pass http://cas.com;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #root /usr/local/www/xny;
            index  index.html index.htm;
        }
    }

4.2 tomcat证书安装
由于上面做了负载均衡,当访问80端口时会自动跳转到443端口。因此,在nginx上安装了ssl证书后,就不需要在tomcat上安装了。相当于nginx做了代理访问,对外。而tomcat只是做为web容器,对内。
5.在线测试证书正确性
5.1证书详情:

5.2使用ssllabs测试证书正确性

证书完全OK
或者ssl验证工具 中文版本的哦

6.Let's Encrypt免费SSL证书续期
./certbot-auto renew
 只用renew的话,会先检查证书是否需要更新,大概是距离到期还有三天或者十几天之内才会执行更新,否则会提示不需要更

新。(昨天更新了证书,今天直接用renew,提示不允许更新)

定时器更新
0 0 1 * * /home/soft/ssl/letsencrypt/certbot-auto renew>>/home/soft/ssl/letsencrypt/log.txt


补充:

Nginx 配置Http和Https共存
server {
            listen 80 default backlog=2048;
            listen 443 ssl;
            server_name wosign.com;
            root /var/www/html;
  
            ssl_certificate /usr/local/Tengine/sslcrt/ wosign.com.crt;
            ssl_certificate_key /usr/local/Tengine/sslcrt/ wosign.com .Key;
        }
ssl写在443端口后面。这样http和https的链接都可以用

————————————————
版权声明:本文为CSDN博主「陈袁」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/achenyuan/article/details/79021340

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!