美文网首页JavaWebJavaWeb开发程序员
如何申请免费证书并基于Nginx搭建Https服务

如何申请免费证书并基于Nginx搭建Https服务

作者: 格子Lin | 来源:发表于2018-07-21 13:14 被阅读739次

    收费证书是真的(赫赫)贵,搭建https服务每年不花个千把块还弄不来,So跟博主一样缺钱的请看过来,教你如何申请免费证书,并基于Nginx搭建https服务。
    转载请注明出处:https://blog.lzoro.com,谢谢~

    一、环境说明

    阿里云ECS云服务器(centOS)一台(我真的不是打广告的)
    lzoro.com域名一个
    Nginx-1.9.9
    浏览器
    

    几个前提条件必须要满足,首先你要有自己的域名/服务器,如果没有的话,建议先准备一下。

    二、步骤

    1、申请证书

    这里格子有一个免费申请证书的网站https://freessl.org/推荐一下,个人觉得挺好用的。

    话不多说,撸起袖子。

    首先,登录网站后,请先注册一个账号,目前注册十分简单,只需要邮箱即可。

    注册freesll.org

    注册完毕请先登录邮箱验证,然后登录freessl.org,就可以开始申请免费证书了。

    填写域名


    填写需要证书的域名

    选择参数,这里格子从freessl.org摘录说明如下

    关于域名验证的说明
    
    CA 需要对您是否拥有该域名进行验证,这样才能给您颁发证书。这里有多种验证方式,您可以采用对您较为方便的方式进行。在进行下一步的同时,你将同意 Lets Encrypt service agreement 或 TrustAsia。如果您的网站有防火墙,请对 66.133.109.36 开放。如果您收到 504 网关超时,无法连接等其它错误, 请刷新页面重试;如果您有自己的CSR文件,可上传CSR文件之后进行手动验证。
    
    文件验证(HTTP)
    
    CA 将通过访问特定 URL 地址来验证您是否有改域名的所有权。因此,您需要下载给顶的验证文件,并上传到您的服务器。
    
    DNS 验证
    
    CA 将通过查询 DNS 的 TXT 记录来确定您对该域名的所有权。您只需要在域名管理平台将生成的 TXT 记录名与记录值添加到该域名下,等待大约 1 分钟即可验证成功。
    
    FreeSSL借助 Trustasia 和 Let's Encrypt 提供的 API,以及使用 Web Cryptography API ,完全使用浏览器生成证书,期间不存在数据传输,如果浏览器不支持 Web Cryptography API,那么我们会从后端服务器生成证书,所以在此强烈建议您使用支持 Web Cryptography API 的浏览器。
    
    选择相关参数

    记录验证DNS的相关值


    验证DNS

    添加解析


    添加DNS验证解析

    生成并下载证书


    生成证书并下载

    至此,证书的申请就大功告成了。
    注意私钥请妥善保存,freessl控制台不会帮你存在私钥,除非你自己上传。

    2、安装配置证书

    证书申请完毕后不安装你留着当传家宝吗。

    本篇博客是基于Nginx进行证书配置,其他诸如IIS、Apache等其他服务器不在本文讨论范围,请移步搜索引擎~

    所以,你需要一台装有Nginx的服务器,真巧,我有。

    先把证书更名,并上传到服务器,格子这边存放路径如下

    /usr/local/nginx/cert/lzoro.pem
    /usr/local/nginx/cert/lzoro.key
    

    进入配置文件所在目录

    cd /usr/local/nginx/conf
    

    编辑配置文件

    vim nginx.conf
    

    配置如下

    server {
        listen 443 ssl;
        server_name blog.lzoro.com;
        ssl on;
        ssl_certificate ../cert/lzoro.pem;
        ssl_certificate_key ../cert/lzoro.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        # 下面root路径格子这边隐去了,各位需自行设置
        root ...;
        location /{
                index  index.html index.htm;
        }
        access_log /usr/local/nginx-1.9.9/logs/blog-https.access.log;
    }
    
    

    重新载入nginx

    ./sbin/nginx -s reload
    # 如果上面的命令不起作用,也可以重启
    ./sbin/nginx -s stop
    ./sbin/nginx
    

    当然,到这一步的话,https的配置就算是完成了,不过当你打开浏览器的美滋滋地敲入https://blog.lzoro.com的时候,可能会发现无法访问,先别着急心里奔腾某个神秘生物,你需要几个步骤来处理。

    如果你用的是云服务器的话,无论是阿里云或者腾讯云亦或其他云,这些云服务器厂商基本上都会提供安全组配置的,所以你需要到你的云服务器控制台,针对该服务器进行安全组配置(说明白些,就是开放端口),配置完安全组之后,再访问一次。

    what!还不行,我真的没逗你。还是上面那个根本原因,你配置了安全组之后,依旧无法访问的话,可能原因是你服务器也开启了防火墙。

    判断防火墙状态

    systemctl status firewalld
    

    没错,出现下图状态证明你是开启了防火墙的,挺好,有安全意识。


    防火墙状态

    开放对应端口并重载防火墙

    firewall-cmd --zone=public --add-port=443/tcp --permanent
    systemctrl reload firewalld
    

    再来一次,https://blog.lzoro.com,是不是可以了,收工。

    什么,还不行。那你可能是遇到了格子没出现的问题,当然你可以搜索解决方案,也可以留言。

    可以了,还不满足只有https访问是吗,想要兼容http访问,没问题。只要在上面的配置稍微修改即可。

    server {
        listen 80;
        listen 443 ssl;
        server_name blog.lzoro.com;
        ssl off;
        ssl_certificate ../cert/lzoro.pem;
        ssl_certificate_key ../cert/lzoro.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        # 下面root路径格子这边隐去了,各位需自行设置
        root ...;
        location /{
                index  index.html index.htm;
        }
        access_log /usr/local/nginx-1.9.9/logs/blog-https.access.log;
    }
    

    无妨的话,点个喜欢呗,溜了溜了。

    相关文章

      网友评论

      本文标题:如何申请免费证书并基于Nginx搭建Https服务

      本文链接:https://www.haomeiwen.com/subject/rdrhmftx.html