zoukankan      html  css  js  c++  java
  • 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这个还是挺方便的。而且,后续的更新也不要自已去维护。

  • 相关阅读:
    JQuery直接调用asp.net后台WebMethod方法
    26个Jquery使用小技巧
    SQL 基本知识
    JQuery 基本知识
    ASP.NET CheckBoxList Operations with jQuery
    asp.net 锚点
    delphi 数据连接规范
    删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
    org.hibernate.QueryException: could not resolve property: address of:
    java.lang.ArithmeticException: / by zero
  • 原文地址:https://www.cnblogs.com/smartrui/p/13995053.html
Copyright © 2011-2022 走看看