其实我以前一直都不太明白,为什么别人的博客基本上都写了 关于如何注册 CA 证书 或者是 全站HTTPS 之类的博文,当时也不很清楚这东西的重要性,直到现在我打算给自己的博客加上 HTTPS 加密。。。
呐,就是上图显示的“安全”的图标,有了这个图标就表示,网站正在对你的网页传输进行加密,就可以防止第三方对你上网的内容进行监听了
其实还可以防止被墙来着,虽然我这博客也没什么被墙的必要啦。。
OK,那么前话就不多说,现在就放教程吧:
准备及前提
- 有自己的服务器或者 VPS
- Debian 或者 Ubuntu 环境
- 有一定的 Linux 操作能力
- 使用 Nginx 作为网页代理
- 给 443 端口放行
- 需要有自己的域名
开始
在这里我们打算使用一款 Linux 上的自动获取 CA 证书的软件:Certbot
Let's Encrypt 作为新的证书颁发机构,免费,自动,开放,这三点对于个人用户来说尤为重要。免费自不用说,自动更是免去了很多过程和麻烦。
官网目前推荐的获取和安装方式是 certbot ,只需要简单运行一些命令并作一些配置即可。
先上一下官网地址以示感谢吧:
https://certbot.eff.org/
https://github.com/certbot/certbot
还有关于 Nginx 由 http 改 https 也并不复杂,需要修改一下你的网页配置文件就好了。
CA 证书获取
安装 Certbot
这一步其实在其他的 Linux 机器上本来需要配置环境,下载依赖包等等操作,但是在 Debian 上,有了 apt 是真的可以为所欲为的
apt install certbot
一行就搞定所有的安装操作了。
找到网站配置文件
为了成功验证你的申请的证书的域名指的是你的服务器,首先你需要打开你的网页配置文件进行配置。
具体是哪个文件要看你在配置 Nginx 的时候是在哪个文件输入的网页配置信息。
因为 Nginx 的配置文件的内容很多都是 互相继承 的,所以造成了很多教程在 “把配置信息写进哪个文件里” 的问题上有所异同。
我就说说我的 Nginx 配置情况吧(对照一下你自己的目录看看):
- 我的 Nginx 配置文件是放在
/etc/nginx
目录下的 - 里面有
nginx.conf
这个主要的配置文件,一般不作修改 - 还有
site-available
和site-enabled
两个文件夹,前者是放置可用的网页配置文件,后者是放置启用的网站配置文件的目录,一般该目录利用软链接到前者来实现启用的,如图
- 我的网站配置文件里面有类似于以下的代码段落
server {
listen 80;
root /var/www/php/typecho;
index index.html index.htm index.php;
server_name www.starryfk.com;
......
}
判断你的网站配置到底写在哪个文件里面了就见仁见智吧,一般就在 nginx.conf
site-available/
site-enabled/
里面之间了。
修改配置
因为我们打算使用 Webroot 的验证方式,certbot 会在域名对应的根目录创建一个叫做 well-known
的隐藏文件夹,并且创建用于验证域名所有权的文件。
为了能使 Nginx 成功反代验证信息,我们需要对 Nginx 的网站配置文件进行修改:
正如上面所说,你打开的配置文件里面会有如下的代码段落:
server {
listen 80;
root /var/www/php/typecho;
index index.html index.htm index.php;
server_name www.starryfk.com;
.....
}
那么我们所需要做的就是在server
代码块的花括号里面加上这一句
location ~ /.well-known {
allow all;
}
现在修改后的代码看起来是这样的
server {
listen 80;
root /var/www/php/typecho;
index index.html index.htm index.php;
server_name www.starryfk.com;
location ~ /.well-known {
allow all;
}
......
}
然后输入
service nginx reload
以此来应用修改的配置。
不过要注意的是,在完成之后,以为不用再验证了,闲得没事删了这段语句,因为证书的续期也是需要再次验证一次的,具体的内容会在后面讲到。
获取 CA 证书
然后就是使用这个超方便的 Certbot 来 干一些羞羞的事情 获取 HTTPS 所需要的 CA 证书
首先先要运行 Certbot
certbot certonly
使用以上的命令来进行获取证书的配置程序
然后就是配置的第一个问题:
How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Place files in webroot directory (webroot)
2: Spin up a temporary webserver (standalone)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
翻译过来的话大概就是:
你喜欢以什么方式来验证 CA 证书?
-------------------------------------------------------------------------------
1. 把文件放进网页根目录(Webroot)
2. 加速(?)一个临时服务器(Standalone(独立))
-------------------------------------------------------------------------------
选择适当的数字[1-2]然后点击[回车](按'c'键取消)
在这里我们就选择 Webroot 方式就好了,也就是:
输入
'1'
然后回车。
然后就是第二个问题:
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel):
翻译过来大概就是:
请输入你的域名(用逗号或者空格来分隔多个域名)(输入'c'来取消):
那么这里就:
输入你博客的域名地址
比如我是 www.starryfk.com
就输入 www.starryfk.com
个人建议的话就最好是输入自己的博客域名的全名(也就是带主机名的),比如 www 前缀
然后就是第三个问题:
Select the webroot for starryfk.com:
-------------------------------------------------------------------------------
1: Enter a new webroot
-------------------------------------------------------------------------------
Press 1 [enter] to confirm the selection (press 'c' to cancel):
翻译过来就是
选择你的域名的网页根目录:
-------------------------------------------------------------------------------
1: 输入一个新的网页根目录
-------------------------------------------------------------------------------
按'1'来确认选项 (按'c'来取消):
这个就没有什么好选择的了啊。。就直接:
输入
'1'
并回车
然后是第四个问题:
Input the webroot for starryfk.com: (Enter 'c' to cancel):
翻译过来就是
输入你的网页的根目录:(输入'c'来取消):
比如我的博客就是丢在 /var/www/php/typecho
的,那么就直接:
输入网站根目录的绝对路径
在注册中可能还会遇到如下的问题:
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
这个我就懒得翻译了,主要就是问你同意不同意网址里面写的协议
(反正都需要我做翻译了,也不指望你能看得懂英文协议了)
这里我们就直接:
输入
'A'
然后回车来同意协议
然后所有的东西都配置好了之后,程序就会自动去注册证书了,至于证书在哪个目录的话,你可以在程序运行的后,输入查看本机保存的证书的指令:
certbot certificates
那个就是你的证书的放置的路径了,如果有些什么其他的应用也需要用到你的这个域名的证书的话,就输入里面所显示的证书和密匙的路径就好了。
想了解其他更多的命令的话就输入certbot --help
就好了
证书的续期
因为这个证书是有3个月的有效期限制的,所以就需要每3个月去注册一次,用如下的指令来 续命 续签:
certbot renew
当然为了方便起见,你还可以在 Linux 上运用 Crontab 计划任务来实现隔一段时间自动执行命令
比如我现在要规定每月的一号的 6:00 都执行一次certbot renew
,输入:
crontab -e
以此来打开计划任务的配置文件,然后在最后加上一行:
0 6 1 * * certbot renew
具体的参数设置便在此不再赘述
配置 Nginx
在获取证书之后,你需要在你的 Nginx 的网页配置里面启用 HTTPS 相关的功能,才能正常使用 HTTPS 连接方式
修改配置文件
正如上面所说,你打开的配置文件里面会有如下的代码段落:
server {
listen 80;
root /var/www/php/typecho;
index index.html index.htm index.php;
server_name www.starryfk.com;
......
}
然后我们就要在此基础上对代码进行修改(不要复制粘贴照抄,因为里面的是我的配置,用的是我的域名,你可能不适用)
- 首先先把
listen 80;
修改为listen 443 ssl;
- 在
server
下面的大括号括着的代码中加入如下的代码(记得要修改路径其中的网页域名):
ssl_certificate /etc/letsencrypt/live/www.starryfk.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.starryfk.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
- 如果想给自己的网页加上自动跳转使用 HTTPS 的BUFF的话,那么就在
server
代码以外加上代码(记得修改域名):
server {
listen 80;
server_name www.starryfk.com;
return 301 https://$host$request_uri;
}
好了,修改后的代码看起来大概是这样的:
server {
listen 80;
server_name www.starryfk.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
root /var/www/php/typecho;
index index.html index.htm index.php;
server_name www.starryfk.com;
ssl_certificate /etc/letsencrypt/live/www.starryfk.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.starryfk.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location ~ /.well-known {
allow all;
......
}
还是那句话,千万不要照着完成后的代码搬上去,跟着步骤来,还有的就是记得把所有的 www.starryfk.com
改成你自己的域名
激活配置
那么修改完成了之后我们就直接重载 Nginx 服务来启用新的配置吧!
servive nginx reload
输入以上的命令来重载 Nginx 的配置文件,一般运行成功是没有任何提示的。
如果有错误提示的话,在再检查一下你的配置文件有没有语法错误,比如缺括号,缺必要的空格之类的
如果觉得自己有必要的话,可以上网再查一下关于 Nginx 的 SSL 优化之类的文章
如果你觉得我的文章有什么不足需要补充修正的地方,欢迎在下方的评论留言,我会第一时间回复的XD
本文由 StarryFK 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jan 21, 2018 at 05:49 pm