阿里云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
来源:CSDN
作者:张耘华
链接:https://blog.csdn.net/oqzuser12345678999q/article/details/104353435