見出し画像

【備忘】無料SSL証明書 Let's Encrypt の Google App Engine での使用方法

備忘ということで、能書きや細かい操作は書きません。
また、筆者環境ではmacOS上で上手く動きませんでしたので、Ubuntu上で作業しました。

なぜに書くかといえば、現在の状況にアップデートされた情報が全く無いか、非常に見つけにくいためです。

まずは手持ちのGoogle App Engineのプロジェクトのapp.yamlに以下のような記述を追加します。なぜこの作業を先に行うかと言えば、実際に証明書作成を行う際の途中でGAE側の作業を行う必要があり、なおかつ、証明書作成作業にタイムアウトが存在するためです。
(staticの部分は適宜読み替えてください)

- url: /.well-known/(.*)
  static_files: static/well-known/\1
  upload: static/well-known/.*

次に以下のコマンドで必要なフォルダとシンボリックリンクを作成します。

mkdir -p static/.well-known/acme-challenge
ln -s static/.well-known static/well-known

なぜにこんな回りくどいことをするかというと、GAEのデフォルト設定ではドットで始まるファイルがアップロード時にスキップされるためです。
設定を書き換える方法もあるのですが、副作用がありえるため、この方法を採ります。

次に下記URLの記述にしたがって、Let's Encrypt設定ツールcertbotのインストールを行います。別のターミナルウインドウで作業を行ったほうがよいです。

https://certbot.eff.org/#pip-other

ほとんど参考にならないため、上記のInstallの項目のみをまず行いましょう。初回の起動時には様々なツールがインストールされるため結構時間がかかります。

その上で、下記コマンドを入力します。ここではドメイン名をexample.comと仮定しておりますので、適宜読み替えてください。

./certbot-auto certonly -a manual -d example.com

そうすると青い画面が表示され、現在の作業環境のグローバルIPアドレスを記録するがよいか?という旨を聞かれますので、Yesを選択し(はじめから選択されているため通常は操作は必要ありません)リターンキーを押します。

すると様々な文字列が表示されますが、以下のprintfから部分だけをコピーしておきます。その際に絶対にリターンキーを押してはいけません。作業がやり直しとなります。

printf "%s" eLpW0fbVYFmo4PpTx8q0NWHowD2Gcdf_fY2ultfnMTM.aGGFVZUBcoOqnDLVqq08wwNQ9Hflrjc1FVOZVUJXX8M > .well-known/acme-challenge/eLpW0fbVYFmo4PpTx8q0NWHowD2Gcdf_fY2ultfnMTM

上記のGAEの作業を行っているターミナルに戻り、staticディレクトリに移動し上記文字列をペーストします。そうすると、.well-known/acme-challenge/eLpW0fbVYFmo4PpTx8q0NWHowD2Gcdf_fY2ultfnMTMというファイルが作成されます。
(ハッシュ文字列は適宜読み替えてください)

そして、GAEのプロジェクトのルートに戻り、以下のコマンドでファイルをアップロードします。

gcloud app deploy app.yaml --project=<プロジェクトID> 

(プロジェクトIDにはアップロード先のプロジェクトIDを入力してください。また、index.yamlやcron.yamlが存在する場合、そちらも指定してください。また、gcloudはgcloud components updateで最新にしておいてください)

アップロードを確認後、以下のコマンドでハッシュ文字列が表示されることを確認します。

curl http://example.com/.well-known/acme-challenge/eLpW0fbVYFmo4PpTx8q0NWHowD2Gcdf_fY2ultfnMTM

(GAE側でのカスタムドメインの設定は既に完了しているものとします)

上記確認後、証明書作成を行っていたターミナルに戻り、リターンキーを押します。成功した場合、しばらくすると以下のようなメッセージが表示されます。

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
expire on 2016-11-03. To obtain a new or tweaked version of this
certificate in the future, simply run certbot-auto again. To
non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

/etc/letsencrypt/live/example.com/fullchain.pemが公開鍵となりますので、保管しておきます。

次に以下のコマンドで秘密鍵を作成します。XXXXはその時点で数字が一番大きいものを選んでください。また、ここでは/tmp/privkey-rsa.pemに書き出していますが、適宜読み替えてください。

openssl rsa -in /etc/letsencrypt/keys/XXXX_key-certbot.pem -out /tmp/privkey-rsa.pem 

上記で作成したfullchain.pemprivacy-rsa.pemを以下の作業で利用します。

Google Cloud Consoleにアクセスし、App Engine > 設定 メニューを開き、SSL証明書タブに切り替えます。

「新しい証明書をアップロード」ボタンを押下します。

上記のような画面が出ますので、上側にfullchain.pemを設定、下側にprivkey-rsa.pemを設定し、「アップロード」ボタンを押します。

すると以下のような画面が表示されます。

使用するドメインをチェックし保存を押すと設定は完了です。

以上です。

この記事が気に入ったらサポートをしてみませんか?