2017年2月13日 星期一

LINE bot webhook 回應SSL certificate is invalid

這次遇到一件奇怪的事情
之前透過ssl for free申請的ssl cert設定好之後
讓瀏覽器開啟https有成功的認證網站具有合法的ssl cert
但是把網址填入LINE bot的webhook url,LINE bot的測試結果會回傳SSL certificate is invalid

筆者先把先前透過ssl for free申請的憑證從DSM中移除之後透過DSM6內建的功能去Let's Encrypt申請一張新的憑證後即可讓LINE bot驗證成功
目前不清楚發生原因,可能的原因也許是之前申請時是使用Web Station+虛擬主機的方式,而實際使用時是用反向代理+web service in docker的方式造成驗證不符合?



2017/03/02 update:
透過DSM新申請的憑證當下是可以驗證成功,但是過了一段時間之後一樣會發生同樣的問題。
目前推測是因為使用ddns的domain,懷疑也許dns cache使得LINE bot解析到錯誤的ip導致驗證失敗。
筆者現在改成使用固定ip就可以成功驗證,目前還在持續觀察這個問題。

2017年2月5日 星期日

在開發環境使用ngrok測試LINE bot(webhook)

在開發LINE bot途中遇到一個問題:如何在開發環境(本機)上取得、測試LINE message?

LINE bot的運作流程是這樣的:
1. 使用者傳送訊息到LINE bot帳號
2. LINE bot收到訊息後會將訊息post給Webhook URL
3. Webhook URL就是我們所寫的web service,負責實際處理收到的訊息

問題發生在2到3之間:
1. 首先是Webhook URL必須是公開的網址才能讓LINE bot呼叫,而開發環境(本機)上一般都是私有網址如http://localhost/api/
2. 其次是LINE bot要求Webhook URL必須有SSL,也就是必須是https

正規的做法就跟設定營運環境(production)一樣,買個public domain、弄個固定ip、申請ssl cert、安裝設定ssl cert & 網路環境...balabala

可以不用這麼麻煩