Let’s EncryptをHerokuアプリに適用して、独自ドメインSSL化してみました。言語はPHPで。
herokuアプリ作成&設定
$ mkdir {PROJECT_NAME}
$ cd {PROJECT_NAME}
$ touch index.php
$ mkdir -p .well-known/acme-challenge # acme chellange用のディレクトリ作成
$ git init
$ git add .
$ git commit -m "init"
$ heroku apps:create {APP_NAME}
$ git push heroku master
$ heroku domains:add {DOMAIN_NAME} # ドメイン追加
このあと、DNSに{APP_NAME}.herokuapp.comへのCNAMEレコードを登録します。
Let’s Encryptのインストール&設定
適当なディレクトリで以下を実行$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help
$ ./letsencrypt-auto certonly --manual --email {CONTACT_EMAIL} -d {DOMAIN_NAME}
以下のようなプロンプトが表示されます。
Make sure your web server displays the following content at
http://{DOMAIN_NAME}/.well-known/acme-challenge/vh0lGRcn8--W-FI6xu32jtyL-khoTs8Uxcu7Ok_3j9A before continuing:
vh0lGRcn8--W-FI6xu32jtyL-khoTs8Uxcu7Ok_3j9A.mHMb6zTz8E2oKGjuKce-X1j9a0eYc-KNyA9l0Cq53jM
If you don't have HTTP server configured, you can run the following
command on the target server (as root):
mkdir -p /tmp/letsencrypt/public_html/.well-known/acme-challenge
cd /tmp/letsencrypt/public_html
printf "%s" vh0lGRcn8--W-FI6xu32jtyL-khoTs8Uxcu7Ok_3j9A.mHMb6zTz8E2oKGjuKce-X1j9a0eYc-KNyA9l0Cq53jM > .well-known/acme-challenge/vh0lGRcn8--W-FI6xu32jtyL-khoTs8Uxcu7Ok_3j9A
# run only once per server:
$(command -v python2 || command -v python2.7 || command -v python2.6) -c \
"import BaseHTTPServer, SimpleHTTPServer; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()"
Press ENTER to continue
この状態になったら、Heroku上でacme challengeを行うために、herokuアプリにファイルを置きます。(上のprintfをコピペでOKです)
$ cd {APPLICATION_DIRECTORY}
$ printf "%s" {CHALLENGE_CODE} > .well-known/acme-challenge/{CHALLENGE_CODE_FILE}
$ git add .
$ git commit -m "add challenge"
$ git push heroku master
あとはPress ENTERのプロンプト上でEnterを押下します。成功時は以下のような結果が表示されます。
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/{DOMAIN_NAME}/fullchain.pem.
Your cert will expire on 2016-06-21. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- If you like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
SSL登録
Heroku側にSSLの設定を行います。$ heroku addons:create ssl:endpoint
$ heroku certs:add /etc/letsencrypt/live/{DOMAIN_NAME}/fullchain.pem \
/etc/letsencrypt/live/{DOMAIN_NAME}/privkey.pem
証明書を設定した時点でCNAMEの向き先が{APP_NAME}.herokuapp.comから変わるので、DNSサーバの設定も変更する必要があります。