這次遇到一件奇怪的事情
之前透過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就可以成功驗證,目前還在持續觀察這個問題。
Hi, 我也是用sslforfree.com來弄憑證(最後也是Let's Encrypt簽發),同樣的在瀏覽器開啟網址是合法的,但LINE bot的webhook url verify卻都無法通過。
回覆刪除一樣是透過DSM的內建反向伺服器(nginx)將https導向內部的flask,不過我是用內建的xxx.myds.me domain來try,不曉得能不能找您的方法改用dsm內建功能再去申請新的憑證
你好,關於重新申請ssl cert的部分。剛申請後新的ssl cert確實能讓LINE bot驗證成功,但是過了一段時間之後此份ssl cert又發生同樣驗證不過的問題。
刪除因為我目前使用的是ddns的domain,目前懷疑也許dns cache使得LINE bot解析到錯誤的ip導致驗證失敗。
現在我是改成使用固定ip就可以成功驗證,目前還在觀察這個問題。
我也遇到這問題,動態的網址Let's Encrypt申請都沒問題網頁也沒問題,Line難道會更嚴格?!感覺很奇怪,後來找到一篇文有提到某些服務是無法自動下載CA,我是用 Node-red ,一般只用了certificate.crt private.key ,於是把ca_bundle.crt 的憑證也弄上去,竟然就過了....
回覆刪除gavin hsu 回應的內容幫助到我,感恩
刪除作者已經移除這則留言。
回覆刪除我的測試結果:
回覆刪除var privateKey = fs.readFileSync('sslcert/private.key', 'utf8');
var certificate = fs.readFileSync('sslcert/certificate.crt', 'utf8');
var credentials = {key: privateKey, cert: certificate};
//失敗
var privateKey = fs.readFileSync('sslcert/private.key', 'utf8');
var certificate = fs.readFileSync('sslcert/certificate.crt', 'utf8');
var cafile = fs.readFileSync('sslcert/ca_bundle.crt','utf-8');
var credentials = {ca:cafile, key: privateKey, cert: certificate};
//失敗
var privateKey = fs.readFileSync('sslcert/private.pem', 'utf8');
var certificate = fs.readFileSync('sslcert/certificate.pem', 'utf8');
var cafile = fs.readFileSync('sslcert/ca_bundle.pem','utf-8');
var credentials = {ca:cafile, key: privateKey, cert: certificate};
var app = express();
var linebotParser = bot.parser();
app.post('/', linebotParser);
var server = https.createServer(credentials, app).listen(8080, function() {
...
}
//這樣就成功了