Posted at

Let's Encrypt + NGINX でLINE botを作るときの注意点を1つだけ

More than 1 year has passed since last update.

最近LINEのMessaging Apiにさわることがあった

一方的に通知がくるものだけでなくそれに対してReplyがくるbot的なものを作る

そんな時に使うのがWebhookという機能 公式doc 

botをルーム内にいれておくことで誰かが発信をした際にwebhookで指定したURLにpostでリクエストがくる

ただこのWebhookのURLは https のURLを指定しないといけない!!

最近は無料証明書が増えてきたしHerokuとか使えばhttps化した状態で使える便利な時代

でも自前のサーバーでLet's Encryptを使いたい


話さないこと


  • Let's Encryptのいれかた



  • WebhookでPostをうけた後の処理


まず起きたこと

現状だと ここから Webhookの指定ができる

URLの横の VERIFY ボタンから疎通するかのテストが通る

ここでsuccessが出ればOK!

しかし出ない... 代わりに SSL certificate is invalid.

スクリーンショット 2016-12-20 9.02.33.png


何が問題だったのか

nginxのkeyの指定ミスってました

最小限の設定だけのせる


駄目な方

listen  443 ssl;

ssl_certificate /etc/letsencrypt/live/hoge.example.com/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/hoge.example.com/privkey.pem;



どう解決したか


OKな方

listen  443 ssl;

ssl_certificate /etc/letsencrypt/live/hoge.example.com/fullchain.pem; # これ
ssl_certificate_key /etc/letsencrypt/live/hoge.example.com/privkey.pem;



そもそもなんだったのか

Let's encryptを使って証明書を発行すると4つほどファイルがはかれる

サーバ証明書(公開鍵): /etc/letsencrypt/live/[ドメイン名]/cert.pem

中間証明書: /etc/letsencrypt/live/[ドメイン名]/chain.pem

サーバ証明書と中間証明書が結合されたファイル: /etc/letsencrypt/live/[ドメイン名]/fullchain.pem

秘密鍵: /etc/letsencrypt/live/[ドメイン名]/privkey.pem

サーバー証明書と秘密鍵の指定でもhttps化はするのですが、中間証明書をはさんだほうが不正改ざんや傍受が難しくなるので

信頼度が高いということでしょうか

とりあえず無事WebhookでPostリクエストがきたので良かったです