生成和配置免費的https證書

     最近在作小程序,調用後臺接口須要https協議請求,小程序之因此這麼要求,也是由於http協議是明文傳播文件數據的,出於數據安全考慮,必須使用https協議。php

    http想實現爲https 就須要爲配置ssl,及其使用的證書。這些在http裏有專門的mod_ssl模塊來支持。css

    yum -y install mod_ssl  #安裝mod_ssl模塊html

 安裝該模塊後,它會自動修改配置文件,增長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)nginx

     既然默認的證書不能使用,那就得本身生成了,這裏網上有不少資料,能夠參考微信公衆平臺的開發文檔:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=10_4;文檔中的操做步驟很詳細,可是最關鍵的一步:三、將生成的csr文件提交給第三方證書頒發機構申請對應域名的服務器證書,同時將私鑰文件保存好,以避免丟失。我作到這,就順便了解了,CA機構還很多,這一步具體怎麼操做,就不太清楚了,因此在這個時候就去查有哪些機構,想了解的能夠參考知乎上的這個連接:https://www.zhihu.com/question/19578422;瞭解以後,以爲Let's Encrypt這一家還能夠,主要是支持免費,因此就嘗試了。web

注:下文中域名:test.example.com不表明真實域名,讀者改爲本身的域名便可。(參考:https://www.cnblogs.com/mawang/p/6758728.html)sql

環境說明:

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; } /usr/share/nginx/html

按期更新

crontab -e # 新增以下定時任務 10 6 * * * /bin/certbot renew --quiet &>/dev/null Let's Encrypt 的證書有效期爲90天,若是證書的有效期大於30天,則上面命令不會真的去更新證書的。 

https測試

在瀏覽器輸入 https://example.com 網址進行驗證小程序

相關文章
相關標籤/搜索