排查MQTT協定SSL/TLS憑證的問題
最近在轉移heroku上的玩具,發現後端對接的模組沒回應,原來遭遇mqtts憑證過期的問題。但是mqtts沒辦法用瀏覽器開啟取得server的憑證,那究竟要怎麼取得憑證呢?
我們可以透過openssl的s_client工具來協助
openssl s_client -showcerts -connect {domain name}:{port} </dev/null
{domain name}:{port}的部份因為s_client不支援http://這種URL前綴,所以就得自己分port
- http協定port是80
- https協定port是443
- mqtt協定port是1883
- mqtts協定是8883
最後的 < /dev/null沒有加上的話,指令會卡著不結束;按下Ctrl+D讓它自然停止,或是按下Ctrl+C讓它強制停止。
2023-04-14 備註: 如果你的機器上沒有/dev/null裝置,可以使用下替代指令
echo -n | openssl s_client -showcerts -connect {domain nmae}:{port}
s_client會顯示溝通的流程和最後驗證的結果,若不想看這麼多訊息,你可以將它導到檔案參考下面"匯出成.cert檔案"部份
然後我就看到憑證錯誤的部份是NotBefore和NotAfter所寫的時間,兩個竟然是一樣的阿!
v:NotBefore: Aug 16 03:43:27 2021 GMT; NotAfter: Aug 16 03:43:27 2022 GMT
SNI需使用的參數
如果遠端server有使用SNI(一個IP有多個domain),則要多加 -servername {domain nmae}
匯出成.cert檔案
如果是想用ubuntu內建憑證工具來看,就接上openssl x509 -text
openssl s_client -showcerts -connect {domain nmae}:{port} </dev/null | openssl x509 -text > server.cert
2023-04-14 備註:上面這個cert檔案在我的新環境下有點不太一樣
留言