基於HTTPS的接口測試——nginx配置SSL
1. 背景
年前團隊成員zjq在做智能設備箱運維系統的微信小程序,主要實現智能設備箱列表展示,單台監測展示,門禁開關控制等功能。做着做着,發現微信小程序的后台接口,都需要https的安全鏈接,IP地址+端口號無效。對,騰訊為了使得小程序的安全,使用了https規范。
2. 所需環境與域名備案解析
2.1 雲服務器
這里推薦購買騰訊雲服務器或者阿里雲服務器,因為他們的服務器會配備一個公網IP,比較地適合做微信后台接口的地址。當然,如果你所裝的寬帶有購買了運營商的公網IP地址,只需要一台電腦,或者服務器就可以使用了。原理都一樣。雲服務器一個優點就是切換安裝操作系統非常方便,而且可以瞬間完成,比如windows server跟linux之間的切換。
本文采用騰訊雲雲服務商:
雲服務器配置:
這里需要注意的是,可以選擇活動期去購買,不然價格還挺貴的。
2.2 域名
域名也可以到阿里雲或者騰訊雲處購買,因為他們都帶有備案功能,而且碰上搞活動也不貴。
本文采用騰訊雲雲服務商:
需要注意的是,這里域名跟IP地址的購買必須保持一致,統一在阿里雲或者騰訊雲。因為備案第一步需要先經過雲服務商的審核,而每個不同的雲服務商的審核規則都不相同。
2.3 SSL證書
HTTPS還需要SSL證書,在如下路由可以申請到免費的SSL證書。
2.3.1 點擊申請免費的SSL證書
2.3.2 選擇SSL服務商
2.3.3 SSL信息填寫
2.3.4 域名身份驗證
2.3.5 申請成功
2.3.6 收費SSL證書
商用SSL證書根據功能不同,收費不同。
2.4 網站備案
2.4.1 備案流程
- 第一步首先進過騰訊雲服務商審核,第二部騰訊雲服務商審核通過之后會提交給管局審核;
- 審核時間與地區相關,浙江地區時間大概為兩周左右;
2.4.2 備案通過
備案通過之后的狀態顯示為綠色的正常。
2.5 域名解析
在域名解析這一步我們將通過配置雲服務商的DNS服務器完成IP地址跟域名的綁定。
2.5.1 點擊雲解析或者域名管理
2.5.2 點擊解析
2.5.3 添加www一條記錄
3.nginx配置SSL
找到nginx.conf配置文件,添加如下配置。
3.1 配置HTTP ssl 443端口號,html文件夾下的index.html是其訪問主頁
#http節點中可以添加多個server節點
server{
#監聽443端口
listen 443 ssl;
#對應的域名,改成自己的域名就可以了
server_name dataxxxx.tech;
#從騰訊雲獲取到的第一個文件的全路徑
ssl_certificate cert/1_www.dataxxxx.tech_bundle.crt;
#從騰訊雲獲取到的第二個文件的全路徑
ssl_certificate_key cert/2_www.dataxxxx.tech.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
#因為使用的是靜態的html網頁,所以直接使用location就可以完成了。
location / {
#文件夾
root html;
#主頁文件
index index.html;
}
}
3.2 配置后台數據的反向代理接口
location /newApi/
{
rewrite ^/newApi/(.*)$ /$1 break; #所有對后端的請求加一個api前綴方便區分,真正訪問的時候移除這個前綴 #
proxy_pass http://localhost:9088;
}
3.3 域名,IP地址跳轉
配置http域名,IP地址跳轉到https 443接口
server{
listen 80;
server_name 148.xx.xxxx.142;
rewrite ^/(.*)$ https://dataxxxx.tech:443/$1 permanent;
}
server{
listen 80;
server_name www.dataxxxx.tech;
rewrite ^/(.*)$ https://dataxxxx.tech:443/$1 permanent;
}
3.4 所有配置代碼詳見如下
#http節點中可以添加多個server節點
server{
#監聽443端口
listen 443 ssl;
#對應的域名,改成自己的域名就可以了
server_name dataxxxx.tech;
#從騰訊雲獲取到的第一個文件的全路徑
ssl_certificate cert/1_www.dataxxxx.tech_bundle.crt;
#從騰訊雲獲取到的第二個文件的全路徑
ssl_certificate_key cert/2_www.dataxxxx.tech.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
#因為使用的是靜態的html網頁,所以直接使用location就可以完成了。
location / {
#文件夾
root html;
#主頁文件
index index.html;
}
location /newApi/
{
rewrite ^/newApi/(.*)$ /$1 break; #所有對后端的請求加一個api前綴方便區分,真正訪問的時候移除這個前綴 #
proxy_pass http://localhost:9088;
}
}
server{
listen 80;
server_name 148.xx.xxxx.142;
rewrite ^/(.*)$ https://dataxxxx.tech:443/$1 permanent;
}
server{
listen 80;
server_name www.dataxxxx.tech;
rewrite ^/(.*)$ https://dataxxxx.tech:443/$1 permanent;
}
4. postman接口測試
4.1 https登錄接口測試
4.2 443端口號省略
基於HTTPS的443端口就像基於http的80端口一樣,可省略。詳見如下例子
5.小結
本文主要總結了后台API接口暴露在公網IP或者域名上的基於SSL證書的一種HTTPS的加密方式,主要基於nginx配置。有任何疑問,我會耐心解答;有任何更好的建議或者解決方案,也請一並提出,好讓我有所提高。