ブラウザに怒られないHTTPSサーバをLet's Encryptとnginxで作る - LINE BOT APIで遊ぶ 準備編
エンジニアの深川です。
今回はLINE BOT API Trial で遊んだ内容について書こうと思っていたのですが、
LINE Developers - BOT API - Overview
LINE BOT API のCallback URLはSSL通信なので、雑なHTTPサーバを用意すればいいかなという目論みは外れて、ドメイン取得、SSL証明書の発行、WEBサーバの設定とやって、HTTPS接続可能なWEBサーバを用意する必要があります。
今回はLINE BOT API Trial を使う前段ということで、お題がSSL証明書の警告の出ないHTTPSサーバの構築について。OSはCentOS6を想定
※ 追記:LINE BOT API Trial、追加募集開始とのことです。
【LINE】「LINE BOT API Trial Account」の追加募集を開始 | LINE Corporation | ニュース
手順です。
1. ドメインの取得
2. Let's EncryptからSSL証明書の作成
3. nginxのインストールと設定
1. ドメインの取得
お名前.comとかムームードメインとかバリュードメインなどでサクッと取りましょう。
特に使い続ける必要が無いなら、linkとか安いドメインしてしまっていいと思います。ドメインを取得したら、そのままDNS AレコードをサーバのIPアドレスで登録します。
2. Let's EncryptからSSL証明書の取得
ここから本編です。
SSLの証明書の取得はLet's Encryptを利用します。Let's Encryptについては下記のリンクで確認してください。
Let's EncryptはPython2.6以下だど動かないので、その場合はPython2.7.9を入れましょう
mkdir src cd src wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz tar zxvf Python-2.7.9.tgz cd Python-2.7.9 mkdir /opt/python ./configure --prefix=/opt/python make sudo make install
古いPythonをリネームして、新しい方にPathを通します。
which python
mv /usr/bin/python /usr/bin/python_old
ln -s /opt/python/bin/python /usr/bin/python
python --version
cd ../
Pythonのバージョンを上げると、yumが動かなくなるのでyum側を修正します。
vim /usr/bin/yum
下記のように一行目を修正します。
#!/usr/bin/python_old import sys try: import yum except ImportError: print >> sys.stderr, """\ There was a problem importing one of the Python modules required to run yum. The error leading to this problem was: %s Please install a package which provides this module, or verify that the module is installed correctly. It's possible that the above module doesn't match the current version of Python, which is: %s If you cannot solve this problem yourself, please go to the yum faq at: http://wiki.linux.duke.edu/YumFaq """ % (sys.exc_value, sys.version) sys.exit(1) sys.path.insert(0, '/usr/share/yum-cli') try: import yummain yummain.user_main(sys.argv[1:], exit_code=True) except KeyboardInterrupt, e: print >> sys.stderr, "\n\nExiting on user cancel." sys.exit(1)
やっとLet's Encryptに着手できます……
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly -a standalone -d www.example.com
sudo ls -la /etc/letsencrypt/live/www.example.com
lsの結果がこんな感じなら成功です(ドメインは適宜自分のものに変更してください)
- cert.pem
- privkey.pem
- chain.pem
- fullchain.pem
3. nginxのインストールと設定
sudo yum -y insatall nginx
sudo nginx
sudo vim /etc/nginx/conf.d/default.conf
3-7行目に適合する部分を変更します。
server { listen 80 default_server; listen 443 ssl; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/www.example.com/cert.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
設定の再読み込み後、httpsで対象のドメインにアクセスできれば完了です。
sudo /etc/init.d/nginx reload