1分钟了解https证书申请及配置

本文只是记录下自已在给网站域名加上HTTPS的过程,不涉及到HTTS的具体原理,如要了解,请自行搜索相关信息。

我们知道,如果要给网站域名加上HTTPS,一般是通过购买证书或去找一些免费的证书来,花钱的这里就不说了,无非是购买证书后,配置就行了。这里说的是免费的,它就是 Let's Encrypt,其实很久之前就听过这个东西,只是一直没有去弄过,这次刚好需要就去看了下,没有想像中的那么麻烦,配合第三方的脚本,签个证书如果顺利的话,简单是分分钟的事。

其实,刚开始我是打算用其它第三方的平台的,比如freessl 这种,后面发现真搞起来,这个也麻烦,又要注册,也要验证域名文件或DNS解析,最主要的是还不能自动更新证书,到期后还得重新弄,于是放弃。

所以,这里还是说下用Let's Encrypt来签发证书和部署环境

安装ACME

安装之前,了解一个叫ACME(自动化证书管理环境)的东西,通过它就可以很方便的来颁发证书、验证域名和管理证书的一些操作了,就是傻瓜化了。

有基于它实现的很多客户端,比如certbot但是我在大概看了下后,觉得不是很简单呀,于是在 Let's Encrypt找到了 acme.sh, 这个用起来更简单,一个命令行的工具。

进入你的系统命令行,输入下面的命令

curl https://get.acme.sh | sh

上面的操作主要干了这么几件事:

  1. 把acme.sh安装到了你的用户主目录 $HOME下的.acme.sh文件夹下,后面你对证书的操作都在这个目录下面,它不会去破坏你系统的其它目录的。
  2. 创建了一个别名 alias acme.sh=~/.acme.sh/acme.sh, 后面就可以用 acme.sh来使用这个脚本了,注意如果你输入acme.sh找不到,那么重新刷下你的用户环境source ~/.bash_profile或开一个新的终端.
  3. 它创建了一个每天检测证书过期的Crontab, 因为证书的时效是60天,过期了就自动更新证书。这一切都是脚本在处理,我们不需要去处理这些。

安装完成后,输入acme.sh --version 来看下安装好了没,如果找不到命令,还是一样刷一下环境变量配置文件

生成证书

这里就通过上面安装的acme.sh来操作了,如果要了解更多,可以去它的官网 acme.sh了解,其实,正常来说,这一步安装的过程很简单的,但是因为我当时赶时间要,在网上看了几篇环境后我就操作,结果有几个关键的步骤他们并没有写出来,导致我一直在试,一直安装不成功,最后还触发了Let's Encrypt的Rate Limit限制,被锁了好久。

我有一个主域名,两个二级域名,一开始我的命令是类似下面这样的,

acme.sh --issue -d ezone.com -d mc.ezone.com -d ag.ezone.com -w /home/wwwroot/ezone.com

上面这个命令的意思是说,我要给三个域名弄一个证书,他们的证书文件都是一样的。网站主目录都是一样,在 /home/wwwroot/ezone.com下面,一开始我没有理解到,以为只要配置任何一个域名的主目录就行了。因为我的这三个域名文件都是在一台机器上面的,所以它们的主目录肯定不可能是一样的.

所以第一个坑就是目录这里我没有做对。

第二个坑就是,因为上面的那种方式是通过http的方式来验证的,也就是说脚本它会在你的网站目录生成类似.well-known/acme-challenge/qsNtqqNOqcAIczvulbYtcd78jdd0GGYR6wZgCW6M-ao这种的。这种是需要在你的Nginx中配置的。我一开始也没有配置,导致一直不成功。于是在各个网站的Nginx配置中加上配置

 location ~ /.well-known/acme-challenge/ {
        allow all;
         root /home/www/web_data/ezone.com;
        try_files $uri =404;
        break;
    }

第三个坑就是,开始没有注意到,应该用他们的测试环境来做,虽然也有Rate Limit限制,但是宽松很多。用测试环境,就用 acme.sh --test --issue这种方式来弄。

所以总结一下,就是如果要生成证书,那么首先你要配置你的Nginx目录,然后如果是多域名,要注意你的网站主目录,另外尽量用测试环境,等没问题了,再用正式的来重新生成就行了。

不过,后面我找到一种更简单的,它有种模式叫 Nginx modeApache mode这种,这种验证不需要在你的网站上面写入任何文件来验证, 就是加了一个 --nginx这种。

acme.sh --issue --nginx -d ezone.com -d mc.ezone.com -d agt.ezone.com

好了,如果没什么问题,成功后证书就生成在你的用户目录~/.acme.sh/ezone.com下面了,但是这个目录是acme.sh脚本内部去控制的,也不知道那天会变,而且我们的Nginx也是读不到这个目录的。那么就只能将这些文件拷到Nginx能读取的地方了。

安装证书

将上面生成的文件,安装拷贝到Nginx的某个目录,比如 /etc/nginx/ssl没有这个就建一个,然后执行下面的语句,将文件拷过去,并加载Nginx

acme.sh --install-cert -d ezone.com 
--key-file       /etc/nginx/ssl/ezone.com.key 
--fullchain-file  /etc/nginx/ssl/ezon.com.cer 
--reloadcmd     "systemctl reload nginx"

/etc/nginx/ssl下面就有上面的两个文件了,然后我们再配置Nginx

server {
    listen       443 ssl http2 default_server;
    server_name ezone.com
    root    /home/web_data/ezonepay.com
    index   index.php index.html index.htm;

    ssl_certificate /etc/nginx/ssl/ezone.com.cer;
    ssl_certificate_key /etc/nginx/ssl/ezone.com.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
   }

好了,经过上面的步骤,HTTPS证书就弄完了,可以用 https:// 来访问你的网站了,通过acme.sh这个还是挺方便的。而且,后续的更新也不要自已去维护。

原文地址:https://www.cnblogs.com/smartrui/p/13995053.html