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

阿里云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的链接都可以用




参考文章:

Let's Encrypt SSL证书配置

免费SSL证书Let’s Encrypt安装使用教程:Apache和Nginx配置SSL


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值