PR TIMESデザイナー&エンジニアブログ BREAK TIMES

PR TIMES Developer Blog(デザイナー&エンジニアによる開発者ブログ)

PR TIMES Developer Blog

当ブログは下記URLに移転しました。
https://developers.prtimes.jp/

ブラウザに怒られない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 | ニュース


f:id:breaktimes:20160425125520p:plain:w250


手順です。

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については下記のリンクで確認してください。

letsencrypt.jp


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

f:id:breaktimes:20160425125249p:plain

次回こそ、LINE BOT APIについて書きます。