最近在作小程序,調用後臺接口須要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
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://example.com 網址進行驗證小程序