为Nginx申请和使用Let‘s Encrypt的SSL免费证书

Posted 杰哥的技术杂货铺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为Nginx申请和使用Let‘s Encrypt的SSL免费证书相关的知识,希望对你有一定的参考价值。

文章目录

一、certbot是什么

我们申请和使用Let’s Encrypt的免费HTTPS证书, 就需要一个证书申请和管理的工具, 然后certbot是官方推荐的申请工具, 我们使用这个工具申请和管理我们的证书

certbot支持大部分的linux发行版, 使用简单, 我们直接下载和安装他们:

我这里的系统是centos 7, 如果是ubuntu或者其他发行版安装方式应该都是差不多的, 我使用官方包直接快速安装

关于HTTPS是什么,这里不再进行解释

Let’s Encrypt是什么可以点击这里

二、获取SSL免费证书

2.1 部署certbot

  • 安装certbot
yum -y install certbot
  • 查看版本
# certbot --version
certbot 1.11.0

2.2 获取证书

安装好管理工具之后, 我们需要申请证书下来, 这里我的web服务器是nginx, 并且我没有网站的静态目录, 所以我使用这个命令申请:

certbot certonly --standalone certbot certonly --standalone -d example.com -d www.example.com -d m.example.com(需要申请证书的域名)

注:-d指定多个域名,则是为多个域名申请SSL证书

如果你的网站有静态目录的话, 可以把–standalone改成–webroot并且加上-w参数申请, 类似这样:

certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com

在你使用–standalone申请证书的时候需要关闭nginx, 因为certbot会启用443端口校验你的域名信息, 如果nginx没有关闭, 会导致端口占用, 所以我们关闭nginx, 我这里是使用ubuntu, 所以使用这个命令关闭nginx:

nginx -s stop

2.3 配置证书

申请证书完成之后证书会存在于/etc/letsencrypt/live/目录, 我们查看一下没有问题后打开nginx的配置文件修改证书载入路径:

server
        listen 80;
        server_name www.example.com;
        rewrite ^(.*) https://$server_name$1 permanent;

server 
        listen 443 ssl;
        server_name www.example.com;
        charset utf-8;
        ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
        #ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_ciphers AES256+EECDH:AES256+EDH:AES256-SHA:HIGH:!ADH:!EXPORT56:+MEDIUM:!MD5;
        ssl_session_timeout 30m;
	location /  
                add_header 'Access-Control-Allow-Origin' '*'; #允许来自所有的访问地址
                add_header 'Access-Control-Allow-Credentials' 'true';
                add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS'; #支持请求方式
                add_header 'Access-Control-Allow-Headers' 'Content-Type,*';
		add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
		if ($request_method = 'OPTIONS') 
			add_header 'Access-Control-Max-Age' 1728000;
			add_header 'Content-Type' 'text/plain; charset=utf-8';
			add_header 'Content-Length' 0;
			return 204;
		
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $http_x_forwarded_for;
		proxy_redirect  off;
		proxy_pass http://127.0.0.1:8080/;
	
      access_log /opt/logs/nginx/www.example.com.log main;

保存退出之后, 检查nginx配置文件是否正确

nginx -t

没有问题的话, reload一下加载nginx配置

nginx -s reload

启动nginx

nginx

启动成功之后可以输入网址访问一下, 证书启用是否成功: https://www.example.com 如果显示证书正常表示成功

三、更新证书

因为 Let’s Encrypt证书的有效期只有90天, 到期的时候我们需要刷新证书的有效期, 才可以继续使用, 刷新证书有效期, 因为我们使用的是–standalone模式安装nginx的证书, 所以刷新证书的时候还是需要关闭nginx, 使用这个命令关闭nginx:

nginx -s stop

然后运行这个命令刷新:

certbot renew --dry-run

或者我们使用系统的定时器, 再时间快要结束的时候, 刷新就行, Let’s Encrypt证书官方说证书截止时间要小于一个月的时候才可以刷新, 我们可以配置每两个多月的时候刷新时间就可以啦, 这里我们编写一个cron计划, 每两个月的凌晨 5:20 执行 更新操作

添加定时任务

# crontab -e 

20 5 * */2 * root certbot renew --pre-hook "nginx -s stop" --post-hook "nginx"

查看定时任务

# crontab -l
#更新nginx的ssl证书
20 5 * */2 * root certbot renew --pre-hook "nginx -s stop" --post-hook "nginx"

至此,我们的证书申请就结束啦!

以上是关于为Nginx申请和使用Let‘s Encrypt的SSL免费证书的主要内容,如果未能解决你的问题,请参考以下文章

免费SSL证书 之Let’s Encrypt申请与部署(Windows Nginx)

Let‘s Encrypt申请ssl证书

centos+nginx申请Let's Encrypt 通配符HTTPS证书

使用 Certbot 申请 Let's Encrypt SSL 证书,并定时续期

教你如何在let's encrypt申请免费证书---开启网站的https之路

申请Let's Encrypt免费SSL证书