zoukankan      html  css  js  c++  java
  • 生成和配置免费的https证书

         最近在做小程序,调用后台接口需要https协议请求,小程序之所以这么要求,也是因为http协议是明文传播文件数据的,出于数据安全考虑,必须使用https协议。

        http想实现为https 就需要为配置ssl,及其使用的证书。这些在http里有专门的mod_ssl模块来支持。

        yum -y install mod_ssl  #安装mod_ssl模块

     安装该模块后,它会自动修改配置文件,增加LoadModule ssl_module modules/mod_ssl.so在httpd的子配置文件/etc/httpd/conf.d/ssl.conf里,同时也打开了443端口,同时指定了证书的存放路径。原因是安装的时候,安装包里会有脚本去生成私钥文件/etc/pki/tls/private/localhost.key,同时也生成证书文件/etc/pki/tls/certs/localhost.crt,而这个证书文件是自签名的,此时https网站已经可以访问,但是由于这个https服务器的证书有问题,颁发给的机构不对,不是对应的站点名称。所以需要要重新向CA申请,在获取CA颁发的证书后才能正确使用https站点。(参考:https://www.cnblogs.com/54db/p/7635254.html)(了解CA机构:https://zhidao.baidu.com/question/753682127954233484.html)

         既然默认的证书不能使用,那就得自己生成了,这里网上有很多资料,可以参考微信公众平台的开发文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=10_4;文档中的操作步骤很详细,但是最关键的一步:3、将生成的csr文件提交给第三方证书颁发机构申请对应域名的服务器证书,同时将私钥文件保存好,以免丢失。我做到这,就顺便了解了,CA机构还不少,这一步具体怎么操作,就不太清楚了,所以在这个时候就去查有哪些机构,想了解的可以参考知乎上的这个链接:https://www.zhihu.com/question/19578422;了解之后,觉得Let's Encrypt这一家还可以,主要是支持免费,所以就尝试了。

    注:下文中域名:test.example.com不代表真实域名,读者改成自己的域名即可。(参考:https://www.cnblogs.com/mawang/p/6758728.html)

    环境说明:

    centos 7
    nginx 1.12
    

    前期准备

    软件安装

    yum install -y epel-release
    yum install -y certbot
    

    创建目录及链接

    方法1:在网站根目录下创建一个.well-known的目录
    方法2:
    mkdir -p /usr/share/nginx/html/.well-known

    配置nginx
        server {
            listen       80 default_server;       
            server_name test.example.com;        index index.html index.htm index.php;
            
    root  /usr/share/nginx/html;

            include /etc/nginx/default.d/*.conf;
            location / {
            }

            error_page 404 /404.html;
                location = /40x.html {
            }

            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }

    命令执行生成证书

    certbot certonly --webroot -w /usr/share/nginx/html -d test.example.com
    
    根据提示进行操作,一般可以正常生产证书文件。
    证书文件的目录存放在: '/etc/letsencrypt/live/test.example.com/'
    会有4个文件:
    cert.pem
    chain.pem
    fullchain.pem
    privkey.pem
    

    nginx配置443端口

    server {
        listen  443 ssl http2;
        server_name test.example.com;
        index index.html index.htm index.php;
        root  /usr/share/nginx/html;
    
        ssl_certificate       /etc/letsencrypt/live/test.example.com/fullchain.pem;
        ssl_certificate_key   /etc/letsencrypt/live/test.example.com/privkey.pem;
    
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
    
        access_log  off;
    }
    

    定期更新

    
    crontab -e # 新增如下定时任务
    10 6 * * *  /bin/certbot renew --quiet &>/dev/null
    
    Let's Encrypt 的证书有效期为90天,如果证书的有效期大于30天,则上面命令不会真的去更新证书的。
    

    https测试

    在浏览器输入 https://example.com 网址进行验证

  • 相关阅读:
    与客服聊天功能测试点
    京东优惠券如何测试
    Linux笔试题
    线程与线程池原理
    PyCharm 介绍、安装、入门使用
    银行APP测试用户体验性方面
    python的闭包
    列表解析2
    深入函数
    再谈装饰器@@@
  • 原文地址:https://www.cnblogs.com/XiaoyangBoke/p/8904023.html
Copyright © 2011-2022 走看看