使用 Let’s Encrypt 在 VPS 上为 Nginx 配置 SSL

之前我们有讲过如何给网站开启全站 SSL 现在我们就一起来看看如何在 vps 上给 Nginx 开启 Let’s Encrypt 证书并且自动更新。

这篇文章中的内容较旧,关于 letsencrypt 的配置文章,我写了一篇新的,或许你可以参考看看:letsencrypt 工具改名 certbot


设置环境

首先,我们要准备一下安装环境,这次我使用的是 CentOS 6.7 Final,如果你使用的是 Ubuntu ,那可能某些路径不同,但应该大同小异。首先我们准备需要的环境,这些内容你的vps有些已经内置,有些则需要更新,而有些则没有安装:

另外,你需要使用到 pip,如果你的vps并没有预装,请参照这篇文章来升级。

安装

这里我们假定你已经配置好了 Nginx ,现在我们来从 Github 克隆一份 Let’s Encrypt 包使用:

现在,我们来进入 Let’s Encrypt 的目录执行一下 letsencrypt-auto 好让它自己完成初始化。

这里你可能会遇到 virtualenv : command not found. 这个错误,那你就需要执行 pip install virtualenv 来安装缺失的包,然后再进行初始化。

一旦初始化完成,我们就可以进行证书签署了!

使用内置插件获取证书

使用内置插件 WebRoot 获取证书的好处是我们可以直接使用 Nginx 提供的 HTTP 服务而不需要关闭 Nginx 好临时让出 80 端口!

编辑 Nginx 配置文件  /usr/local/nginx/conf/nginx.conf ,在里边相应位置插入如下内容:

修改后的配置文件应该类似这样:

记住插入到  server 的大括号内部。

现在重启 Nginx 即可: nginx -t && service nginx restart ,如果报错,说明你的配置文件并没有改好。

接下来使用命令获取证书,期间会要求你同意协议以及输入一个邮箱,目的是将来用来升级和恢复密钥:

值得一提的是,你需要root权限来执行。另外,你的域名必须直接指向你的 vps 地址,如果你用了什么 DNS 加速之类的 CDN,需要取消掉才行,因为它们会隐藏你服务器的真实 IP。

成功完成后,你应该就可以在 /etc/letsencrypt/live/your_domain_name 这个目录里找到你的证书了!

接下来执行如下命令来生成 迪菲-赫尔曼密钥 以增强安全:

冗长的等待之后就是配置 Nginx 使用 SSL 了。

配置 Nginx 的 SSL

总之,在你 Nginx 网站配置目录下找到对应网站的配置文件,你会发现它们都只有关于 80 端口的监听,我们把它先改掉:

这样让 Nginx 遇到 HTTP 访问时自动转发给 HTTPS。

然后我们来添加 443 端口监听,这个配置就在同一个文件最顶一行开始即可:

注意这里要把  example.com 换为你的域名,然后把 root /usr/share/nginx/html; 这一行换为你的网站目录。

现在,再次重启你的 Nginx nginx -t && service nginx restart 然后尝试用浏览器打开这个页面来测试结果吧:https://www.ssllabs.com/ssltest/analyze.html?d=www.logcg.com

别急,还有续期

由于  Let’s Encrypt 是免费签发的,为了安全,它只提供为期三个月的有效期——官方也鼓励使用自动化配置来完成续期,总之,你可以使用  ./letsencrypt-auto renew 来手动完成续期,或者你也可以使用 Linux 自己的任务计划功能。

如果你在执行这个命令的时候出现找不到命令的情况,就使用如下命令安装它:

总之,在打开的文件中写入如下内容:

添加的任务会在每周一凌晨三点半执行证书的更新操作,这样可以保证你的证书永远都是最新的。

本文由 落格博客 原创撰写:落格博客 » 使用 Let’s Encrypt 在 VPS 上为 Nginx 配置 SSL

转载请保留出处和原文链接:https://www.logcg.com/archives/1709.html

About the Author

R0uter

如非声明,本人所著文章均为原创手打,转载请注明本页面链接和我的名字。

Comments

          1. 哈,谢啦~暂时用这个也还好了。我做了计划任务每周自动检查续期的,而且目前也没有泛域名的需求,将来有的话再找你咯~XD

  1. 那种用包管理器安装的nginx和apache的几乎是一键式的……
    但是自己编译的,很多人尝试letsencrypt-auto都不行,于是只要certonly哈哈~

      1. 我也是standalone,不过暂时关闭下web服务器而已。
        如果使用CDN的话,其实我也不知道我那次是怎么配置好的证书(服务器上也是用真实的证书而不是自签)……
        刚才去cf测试了下,开Development Mode和Pause website都不可以呢

          1. 我以前用cf,后来节点被墙了一大片就不用了。后来cf和国内百度还是谁的合作了,然后国际版好像都不行了我就放弃了。反正现在我的速度够快,就直接跑就好了

          2. cf国内和百度合作的,叫“百度云加速”,你服务器在香港必然快啊~其实我在想,要不我解析回大陆也行的。因为我弄的me域名没备案就解析到腾讯云了。。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注