Let's Encrypt免费ssl证书安装使用详解

Let's Encrypt

Let's Encrypt是由互联网安全研究小组(ISRG,一个公益组织)于2015年末推出的数字证书认证机构一个免费SSL证书,证书有90天的有效期,可以配置自动化更新证书,非常适合个人使用。

安装证书

安装certbot

yum install certbot

获取证书(standalone和webroot模式)
standalone 独立模式安装证书

certbot certonly --email youremail@gmail.com -d example.com

设置你的邮箱和服务域名,执行该命令即可生成证书。 tips:

  • 生成会启用服务器的443端口,来验证域名是否与服务器绑定
  • 确保你没有其他服务占用了443端口(如nginx)
webroot 模式在服务根目录下安装证书

certbot certonly --webroot -w /var/www/example -d example.com --email youremail@gmail.com

使用--webroot 模式会在你指定的/var/www/example 服务目录中创建.well-known文件夹,这个文件夹里面包含了一些验证文件,certbot会通过访问example.com/.well-known/acme-challenge来验证你的域名是否绑定的这个服务器。

证书生成成功以后可以在/etc/letsencrypt/live/ 目录下看到对应域名的文件

遇到过的两个证书生成出现的问题:

1.python的模块版本的问题

报错提示:
ImportError: No module named 'requests.packages.urllib3'
运行以下命令后,成功解决
pip install requests urllib3 pyOpenSSL --force --upgrade
pip install --upgrade --force-reinstall 'requests==2.6.0'
复制代码

2.openssl版本过低问题

报错提示:
raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
解决:
装高版本pyOpenSSL即可
复制代码

配置nginx启用HTTPS

使用standalone模式生成证书以后配和Nginx即可启用https Nginx配置

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    gzip on;
    gzip_min_length 1k;
    gzip_buffers    4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
    server {  
        listen  80;
        server_name www.binlive.cn binlive.cn;
        rewrite ^(.*)$  https://$host$1 permanent;  
    }
    server {
        listen 443 ssl;
        server_name  www.binlive.cn binlive.cn;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/binlive.cn/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/binlive.cn/privkey.pem;
        ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_session_cache shared:SSL:10m;
        ssl_prefer_server_ciphers on;
        ssl_session_timeout  5m;
        location /{
            proxy_pass http://127.0.0.1:3000;
    	    proxy_set_header  Host              $http_host;   # required for docker client's sake
    	    proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
    	    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
    	    proxy_set_header  X-Forwarded-Proto $scheme;
    	    proxy_read_timeout                  900;
        }
    }
}
复制代码
  • 第一个server中监听80端口,把http请求改为https请求
  • 第二个server中启用https服务,https服务的默认端口为443
  • ssl_certificatessl_certificate_key中指定生成的SSL的证书路径

自动更新SSL证书

Let’s Encrypt提供的证书有效期为90天,certbot renew命令可以自动更新证书

crontab 定时任务

执行crontab -e即可编辑定时任务,在编辑中输入下面命令即可 15 3 * */2 * certbot renew --pre-hook "nginx -s stop" --post-hook "nginx" 这段定时命令为每隔两月凌晨 3:15执行命令, --pre-hook 意思为执行命令之前的一步操作,更新证书需要先停止Nginx服务,在更新完成后会自动执行--post-hook 后面的命令,开启Nginx服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值