本文將為大家闡明為蘋果ATS和微信小順序搭建 Nginx + HTTPS 服務的闡明,詳細操作請看面的內容
昨天測試開發微信小順序,才發現微信也要求用HTTPS加密數據,想來是由於之前蘋果的ATS審核政策的緣故吧,微信想在蘋果上開放小順序必定也只能要求開發者必需運用HTTPS了,於是在服務器上測試裝置Nginx+HTTPS服務。
裝置 HTTPS 最費事的問題應該就是獲取證書了,證書覺得品種也挺復雜的,有好幾種,單域、泛域、多域。。。還有個種規范烏七八糟的覺得,而且免費很高,還是每年買的。
如今各個雲服務商也都有提供各種根底功用的收費證書,但似乎很多只對單域收費,這裡的單域是指每個二級域名都算是一個域名,每個二級域名都需求獨自配置證書。
我運用的是收費的 Let's encrypt 證書,支持蘋果ATS規范。
https://letsencrypt.org/ Let's Encrypt 項目旨在讓每個網站都能運用 HTTPS 加密,該項目取得了 Mozilla、思科、Akamai、IdenTrust 和 EFF 等組織的支持, 由 Linux 基金會托管
我用的是阿裡雲的服務器,操作零碎版本:CentOS7.0
提示:在一切開端前,需求先留意看看服務器剩余內存,我一開端用的是最低配的測試服務器,剩余可用內存只要70MB左右,後果服務器直接掛了,所以最好先騰出個300MB內存再來。
另外,就是服務器必需綁定域名且是外網可以直接訪問的才行,若是內網或虛擬機上是不行的,由於證書裝置時需求經過域名訪問數據的,否則不能生成證書。
SSL labs 最終配置測試後果,
wget https://www.openssl.org/source/openssl-1.1.0c.tar.gz
tar -zxvf openssl-1.1.0c.tar.gz
cd openssl-1.1.0c/
./config --prefix=/usr shared zlib
make
make install
二、修正Nginx配置以支持 .well-known 目錄的訪問
證書裝置時會在網站根目錄下自動生成 .well-known 目錄,必需讓外網可以訪問該目錄下的文件才行,否則會認證失敗。
關於 Nginx 的版本,我測試時運用過的最低版本是 nginx1.8.1,建議運用以後最新的波動版 nginx1.10.2
假如之前 nginx.conf 中存在相似上面的規則
location ~ /\. {
deny all;
}
需求添加上面配置:留意,由於前面證書還需求自動續期,所以這個配置前面還是需求用到的,不能刪除。
location ~ /.well-known {
allow all;
}
三、裝置 certbot-auto
1, 需求先裝置 epel
yum install epel-release
2, 先修正為運用國際的 pip 源 ```mkdir ~/.pip cat > ~/.pip/pip.conf <<EOF [global] index-url = https://pypi.doubanio.com/simple/
[install] trusted-host=pypi.doubanio.com EOF
3, 裝置 certbot 依賴包
mkdir /usr/local/certbot cd /usr/local/certbot wget https://dl.eff.org/certbot-auto --no-check-certificate chmod +x ./certbot-auto ./certbot-auto -n
裝置時錯誤:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed
![為蘋果ATS和微信小順序搭建 Nginx + HTTPS 服務](http://img.blog.csdn.net/20170122140144795?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdXptZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
處理辦法:
yum provides '*/applydeltarpm' yum install deltarpm
裝置依賴的時分會下載少量包能夠看著沒動態,留意top看看能否有python的進程在跑
我裝置完後,呈現上面信息,可以直接疏忽的,沒有問題的
> Saving debug log to /var/log/letsencrypt/letsencrypt.log
Missing command line flags. For non-interactive execution, you will need to specify a plugin on the command line. Run with '--help plugins' to see a list of options, and see https://eff.org/letsencrypt-plugins for more detail on what the plugins do and how to use them.
####四、生成證書
> 生成證書,有多種方式,選擇你需求的一種
[email protected] 為管理員的郵箱,請先交換為您的郵箱地址
1. 網站一個域名的證書
./certbot-auto certonly --email [email protected] --agree-tos --webroot -w /home/wwwroot/yourwebsite -d www.yourdomain.com
2. 一個網站多個域名只生成一個證書
./certbot-auto certonly --email [email protected] --agree-tos --webroot -w /home/wwwroot/yourwebsite -d www.yourdomain.com -d m.yourdomain.com
3. 多個網站多個域名生成多個證書
./certbot-auto certonly --email [email protected] --agree-tos --webroot -w /home/wwwroot/yourwebsite -d www.yourdomain.com -d m.yourdomain.com -w /home/wwwroot/myanotherwebsite -d www.aotherdomain.com -d www.aotherdomain.com
呈現上面信息就裝置好了
> IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/www.youqumob.com/fullchain.pem. Your cert
will expire on 2017-04-19. To obtain a new or tweaked version of
this certificate in the future, simply run certbot-auto again. To
non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
>
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
檢查生成的證書,反省能否存在對應域名的密鑰文件
ll /etc/letsencrypt/live/
> 我們需求給Nginx配置用的文件為:
fullchain.pem - 證書文件
privkey.pem - 私鑰文件
####五、給Nginx添加SSL證書
> HTTP 默許端口是 80,所以運用 http 時我們無須輸出端口號,HTTPS 默許的端口是 443,所以如今運用 https 不輸出端口號,實踐上是運用的 443 端口了
修正你的網站配置文件,上面以 nginx.conf 為例
vi nginx.conf
> 假如你原來的網站還允許 http 訪問,那就先復制一份再來修正,假如直接全部運用https 則直接修正
上面展現需求修正的次要配置代碼
server { listen 443 ssl; # 假如你的服務器支持ipv6,可開啟上面這一行 # listen [::]:443 ssl http2; server_name www.yourdomain.com;
# SSL 驗證配置
ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";
# 默許值
ssl_ciphers HIGH:!aNULL:!MD5;
# 聽說這個兼容 ie6 xp , 但實踐測試發現基本打不開網頁啊
#ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
#ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
#ssl_ciphers "EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
#ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_session_timeout 10m;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
# 上面還是你原來的其他配置...
}
> 關於 ssl_ciphers 這個參數的配置真實是沒搞明白,網上找了半天也沒有找到能說清楚詳細怎樣配置的,下面的幾種都是網上看到的比擬多的幾種寫法,也覺得不出來有什麼區別,最後我還是運用的默許配置了。
修正保管後記得先測試下配置能否正確
nginx -t nginx -s reload
####六、開啟防火牆443端口允許內部訪問
vi /etc/sysconfig/iptables
添加一行
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
重啟防火牆
如今翻開網站測試下訪問能否正常。
> 留意,假如你在閱讀器上網址右邊沒看到一個綠色的鎖,表示網頁上應該還有非 https 的懇求,需求將頁面上的 http 懇求全部改形成 https 之後就是綠色的鎖喽。
####七、定時義務自動更新證書續期
> 由於聽說證書的無效期是 90天,但可以有限續期,所以最後還要添加個證書的自動續期定時義務功用,
留意更新證書的頻率是無限制的哦,不要太頻繁了,可以看看闡明頁面 https://letsencrypt.org/docs/rate-limits/
英文一大堆有些看不懂,大約意思吧說的是各種新增更新之類的狀況每周 5~20次的限制
crontab -e
添加義務,每月1號清晨5點30分更新一次證書,並自動重載 nginx 配置30 05 01 * * /usr/local/certbot/certbot-auto renew --renew-hook "/etc/init.d/nginx reload"
####八、測試能否契合蘋果的ATS要求
在蘋果操作零碎的終端中經過nscurl命令來診斷反省
nscurl --verbose --ats-diagnostics https://www.yourdomain.com
我在蘋果上測試了下 TLSv1 TLSv1.1 TLSv1.2 全部 PASS 經過了的
![為蘋果ATS和微信小順序搭建 Nginx + HTTPS 服務](http://img.blog.csdn.net/20170122140627250?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdXptZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
不當時來發現還可以線上測試:
騰訊雲下面有個在線蘋果ATS檢測的功用可以試試
https://www.qcloud.com/product/ssl
![為蘋果ATS和微信小順序搭建 Nginx + HTTPS 服務](http://img.blog.csdn.net/20170122140844724?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdXptZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
測試也全部經過
####九、其他問題
1, 檢測服務器 HTTPS 配置平安性
https://www.ssllabs.com/ssltest/analyze.html
呈現上面提示,平安等級竟然為 F 無語。。
> This server is vulnerable to the OpenSSL Padding oracle vulnerability (CVE-2016-2107) and insecure
一番搜索後,發現是服務器的 openssl 版本太低的緣由,需求晉級 openssl 了,可以檢查第一步更新下再重新編譯Nginx
2, 重定向的問題
> 假如只想運用 HTTPS ,以前的 HTTP 方式普通是需求 301 或 302 重定向到 HTTPS 懇求上的,但這樣會招致多一次懇求,而且異樣存在能夠被劫持的風險,
此時可以運用 HSTS ,可以將以後的 HTTP 懇求重置為 HTTPS 方式而不必跳轉,max-age的時間依據你的需求自定義
加上這個後,你的服務器在 SSLLAB 上的等級就是 A+ 啦
在 server 局部添加 add_header
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
留意:
> 若要取消時不能直接刪除該配置,必需先將 max-age=0; 設置為 0 一段時間後再去掉,否則能夠招致局部用戶閱讀器未更新配置。
也就是說這個功用只能是當用戶 經過 https 協議訪問過網站一次後閱讀器緩存住跳轉信息,下次持續用 http 懇求的時分閱讀器才會自動跳了而不再是懇求了服務器後來跳轉
建議假如不是全站都轉移到 https ,僅用 https 訪問網站的話還是別用,還是服務器來控制跳轉好些
3, SSL labs 呈現提示:
> This server supports weak Diffie-Hellman (DH) key exchange parameters. Grade capped to B.
處理辦法(上面的密鑰保管目錄可自定義):
mkdir -p /usr/local/nginx/conf/vhost/ssl openssl dhparam -out /usr/local/nginx/conf/vhost/ssl/dhparams.pem 2048
添加 nginx ssl 配置:
vi nginx.conf ssl_dhparam /usr/local/nginx/conf/vhost/ssl/dhparams.pem; ```
好了,整個服務端配置完成。
【為蘋果ATS和微信小順序搭建 Nginx + HTTPS 服務】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!