Nginx 部署的虚拟主机如何使用 Let's Encrypt 来进行加密 https
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 部署的虚拟主机如何使用 Let's Encrypt 来进行加密 https相关的知识,希望对你有一定的参考价值。
参考技术A HTTPS 是现在网站的标配了,很多服务都是必须使用 https,如果你不使用的话,浏览器可能就不会对你非常友好了。如果你不想使用商业的 CA 秘钥的话,你可以使用 Let’s Encrypt 来进行加密。
使用 Let’s Encrypt 唯一不好的地方就是每 3 个月要更新一次,当然你也可以使用自动的更新来处理就好了。
我们需要通过安装插件来实现:
获得 SSL 加密需要的 pem 秘钥。
设置 certbot 能自动更新秘钥。
需要前提条件
已经安装好了 nginx并且配置好了虚拟主机
安装好python3-certbot-nginx插件
对 Nginx 虚拟主机的配置方法我们就不详细说了,你可以自己搜索下进行配置。
安装 python3-certbot-nginx 插件
安装的命令非常简单:
执行下面的命令就可以了:sudo dnf install python3-certbot-nginx需要注意的是,我们这个命令是带有 nginx 插件的。
还有一个官方的是不带有插件的,不建议装那个,因为非常不好配。
获得 pem 秘钥
运行下面的命令sudo certbot certonly --nginx,需要后面添加 nginx 参数才可以了。
通过下面的寂寞我们可以看到,这个工具将会检测到你的本地服务器上有几个虚拟主机。
然后你需要选择你需要的一个来进行安装。
在安装成功后,会生成我们需要的 pem 秘钥。
配置你的虚拟主机
找打你的虚拟主机文件,然后将生成的秘钥配置上去就可以了。
例如我们的虚拟主机配置:
我们首先在上面配置了 80 端口的重定向,然后将生成的 2 个秘钥文件的指定位置配置上去就行了。
然后重启 Nginx 服务器,然后检查你的网站的 HTTPS 情况。
检查网站 HTTPS 情况
可以使用一些第三方的网站来进行检查,也可以直接使用浏览器来检查。
主要看看网站有没有正常的重定向,和 SSL 证书的过期时间。
上面的证书看起来签发的是泛域名。
https://www.ossez.com/t/nginx-lets-encrypt-https/14034
为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 来进行加密 https的主要内容,如果未能解决你的问题,请参考以下文章
Nginx使用Certbot配置Let's Encrypt域名https解决方案
let's encrypt生成免费https证书 ubuntu+tomcat+nginx+let's encrypt
Docker 使用Let's Encrypt 部署 HTTPS