版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接:https://blog.csdn.net/bright69/article/details/82664431
配置徹底免費的https服務器
最近想開發一個微信小程序,使用微信官方提供的開發工具,UI部分處理很方便,但涉及調用後臺時,後臺服務器要求是https的合法域名(以下圖)。html
開發階段,不想浪費錢,所以找辦法配置https服務器。linux
當前狀況、問題及解決方案
個人後臺是centos 7+jdk 1.8+tomcat 9.0.11,位於公司內網,沒有公網IP(公司內網的公網出口IP是變化的)、域名和證書。
注:個人服務器的內網IP爲:192.168.1.230
那麼,爲了配置可用的https服務器,我須要解決以下幾個問題:
1.個人網站須要一個域名,經過該域名能夠訪問到個人服務器(相似於花生殼)
2.Https須要的ssl證書
爲解決上述問題,準備採用frp來實現免費域名+內網穿透,採用Let’s Encrypt1提供的免費ssl證書
實現思路git
1.使用frp申請一個域名,協議:http,用於後面申請ssl證書時使用。
2.使用certbot-auto申請Let’s Encrypt提供的免費證書。
3.申請證書成功後,配置tomcat的https參數使用剛申請的證書
4.調整frp配置,由http改成https。
5.測試
6.配置微信小程序的合法域名github
實現步驟web
第一步:申請一個免費的域名,且可以支持內網穿透小程序
目前,提供免費域名的站點有不少,但支持內網穿透且免費的很少,我使用的是frp,frp的官網在:https://github.com/fatedier/frp。您能夠再此得到程序和相關文檔。
frp提供了frps(服務器端)和frpc(客戶端)兩種部署模式。我要使用的是frpc。
1.肯定frps服務器
網上frps服務器有不少,這裏提供一個查看的地址:http://www.frps.top/
肯定frps服務器時須要注意服務器使用的軟件版本號和開放的端口。
軟件版本號決定了你要使用的frpc的軟件版本(能夠從官網下載),您的應用所需的端口號要和站點開放的端口匹配。
我選擇的是:http://freenat.win,軟件版本:0.16.1
2.從官網下載對應版本的程序
步驟以下:
A:選擇版本微信小程序
B:肯定下載目標centos
3.解壓縮
tar -zxvf frp_0.16.1_linux_amd64.tar.gz
解壓縮後的文件列表瀏覽器
4.配置frpc
使用frpc,配置文件爲frpc.ini。文件中各項參數的說明請見:http://www.chuantou.org/47.html
個人frpc.ini配置tomcat
[common]
server_addr = freenat.bid #frps服務器
server_port = 7000 #frps服務器端口
privilege_token = frp888 #客戶端鏈接到FRPS服務端的驗證密鑰
log_file = frpc.log #日誌文件位置和名稱
log_level = info #日誌等級,trace, debug, info, warn, error
log_max_days = 7 #日誌保存天數
login_fail_exit = false #frpc鏈接frps失敗後是否重連,true:重連
protocol = kcp #鏈接frps服務端的通信協議,可選:tcp、kcp。具體使用哪一個,須要看站點說明
[http_FrpcTest2018] #但願申請的域名[2]
type = http #協議
local_ip = 127.0.0.1 #站點所在服務器的地址[3]
local_port = 8080 #站點使用的端口
use_compression = true #frpc和frps之間的通訊是否壓縮[4]
use_encryption = true #frpc和frps之間的通訊是否加密[4]
custom_domains = FrpcTest2018.freenat.bid #申請的域名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
其中:
http_FrpcTest20182
local_ip3
use_compression4
use_encryption5
5.啓動
# ./frpc -c ./frpc.ini & #後臺模式
1
6.測試
瀏覽器中輸入域名「http://FrpcTest2018.freenat.bid」測試
第二步:使用剛剛申請的域名申請證書
我使用CertBot申請Let’s Encrypt免費ssl證書,官網地址:
Let’ Encrypt官網:https://letsencrypt.org/
CertBot官網:https://certbot.eff.org/
1.下載CertBot-auto
# wget https://dl.eff.org/certbot-auto
1
2.修改權限
# chmod a+x certbot-auto
1
3.建立驗證所需目錄
Let’s Encrypt申請過程當中,會訪問你的站點,並在站點上寫入一些測試文件。這樣就要求必須在申請前提早建立這些目錄。
目錄的位置:站點根目錄/.well-known/acme-challenge
# mkdir -p /home/tomcat-9.0.11/webapps/.well-known/acme-challenge
1
4.申請證書
# ./certbot-auto certonly --webroot -w /home/tomcat-9.0.11/webapps/ -d FrpcTest2018.freenat.bid
1
4.1 此後會自動下載安裝一堆程序,確認便可。
4.2 登記到期通知或安全警告時使用的郵箱
4.3 贊成使用協議
4.4 是否共享郵箱
5.證書
申請成功,證書將存放在/etc/letencrypt/live/站點域名/目錄下,以下圖:
第三步 配置tomcat的https參數
從Let’s Encrypt申請的證書是pem格式。tomcat使用這種格式的證書須要apr、openssl、tomcat-native等一大堆支持,太麻煩,所以決定將其轉換爲tomcat使用的JKS格式,以下:
1.轉換格式
1.1 pem轉換爲pfx
# openssl pkcs12 -export -out /home/ssl/FrpcTest2018.pfx -in /etc/letsencrypt/live/frpctest2018.freenat.bid/fullchain.pem -inkey /etc/letsencrypt/live/frpctest2018.freenat.bid/privkey.pem
Enter Export Password: [輸入您的密碼]
Verifying - Enter Export Password: [輸入您的密碼]
1.2 pfx轉換爲jks
# keytool -importkeystore -srckeystore FrpcTest2018.pfx -destkeystore FrpcTest2018.jks -srcstoretype PKCS12 -deststoretype pkcs12
Importing keystore FrpcTest2018.pfx to FrpcTest2018.jks...
Enter destination keystore password: [輸入您的密碼]
Re-enter new password: [輸入您的密碼]
Enter source keystore password: [輸入您的密碼]
Entry for alias 1 successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
1
2
3
4
5
6
7
8
9
10
11
12
至此,格式成功由pem轉換爲JKS。
2.拷貝證書到tomcat目錄下
# cp /home/ssl/FrpcTest2018.jks /home/tomcat-9.0.11/ssl/.
1
3.配置tomcat的server.xml文件
在文件中增長以下內容:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/home/tomcat-9.0.11/ssl/FrpcTest2018.jks"
keystorePass="您的密碼" />
1
2
3
4
5
4.重啓tomcat
#./home/tomcat-9.0.11/bin/shutdown.sh
#./home/tomcat-9.0.11/bin/startup.sh
1
2
5.測試
在瀏覽器中輸入https://192.168.1.230:8443,結果頁面以下:
注意:
1.此時的地址與申請證書時使用的地址(FrpcTest2018.freenat.bid)不一樣,所以會出現警告,不用理會。
2.此時http://域名/仍然可使用
第四步 修改frp配置,使https穿透內網
1.修改frpc.ini
將前面的frpc.ini內容修改成以下:
[common]
server_addr = freenat.bid
server_port = 7000
privilege_token = frp888
log_file = frpc.log
log_level = info
log_max_days = 7
login_fail_exit = false
protocol = kcp
[http_FrpcTest2018]
type = https #修改成https,使得https能夠穿透內網
local_ip = 127.0.0.1
local_port = 8443 #https端口
use_compression = true
use_encryption = true
custom_domains = FrpcTest2018.freenat.bid
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2.重啓frpc服務
# ps -ef|grep frpc
root 8520 983 1 17:09 pts/0 00:01:11 ./frpc -c ./frpc.ini
root 9173 983 0 19:03 pts/0 00:00:00 grep --color=auto frpc
# kill -9 8520
[1] Killed ./frpc -c ./frpc.ini
# /home/frp/frpc -c /home/frp/frpc.ini &
1
2
3
4
5
6
3.測試
此時,http://FrpcTest2018.freenat.bid/沒法訪問
而https://FrpcTest2018.freenat.bid/則能夠訪問
至此,微信小程序要求的合法域名站點側配置完畢。可使用小程序帳號登陸微信公衆平臺,配置合法域名了。
最後,多囉嗦兩句。
第一,到如今,公網能夠訪問的服務只有https,私網能夠訪問的包括http和https。
第二,後續若是想徹底禁止http訪問,在tomcat的server.xml文件中註釋掉http端口(8080)便可。
Let’s Encrypt提供的域名是免費的,有效期3個月,容許續期 ↩freenat.win的域名爲二級域名,例如:FrpcTest2018.freenat.bid。最好多寫一些,以避免與其餘申請衝突。 ↩若是站點在其餘服務器上,填寫那個服務器的IP地址。注意:站點服務器要和frpc所在的服務器在一個局域網內 ↩根據frps服務器要求決定 ↩根據frps服務器要求決定 ↩————————————————版權聲明:本文爲CSDN博主「bright69」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/bright69/article/details/82664431