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接入let's encrypt

Nginx使用Certbot配置Let's Encrypt域名https解决方案

let's encrypt生成免费https证书 ubuntu+tomcat+nginx+let's encrypt

Docker 使用Let's Encrypt 部署 HTTPS

在Ubuntu使用 Let's Encrypt 证书部署 HTTPS的方法

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