Edited at

月500円~のIDCFクラウド上のサーバーでLet's Encryptを使ってhttps通信をする

More than 1 year has passed since last update.


自分で立てたAPIでSSL通信をさせようと思った

こちらの記事(翻訳: WebAPI 設計のベストプラクティス)を見てAPIはSSL通信であるべきということだったので

アニソン情報を取得するRESTfulAPIを公開しました。

で公開したAPIに無料で使えるらしいLet's Encryptの証明書を使ってhttps通信に対応させてみました。


Let's Encryptを使用する前に確認すること

Qiita:Let's Encryptで無料SSL証明書を取得するより


取得前に確認すること


  • まずドメイン名を取得していること。


  • そのドメイン名をDNS登録してIPアドレスへ名前解決している事


  • 期限切れ時近くにくるメールの受信用メールアドレスを決める。




環境

マシンはIDCFクラウドのlight.S1タイプ

IDCFクラウドは最低月500円からIaaSを利用できるのでクラウド+Linux周りの勉強にいいかもしれない。

というか環境構築から何から何までめちゃくちゃ勉強になったし公式のドキュメントも充実しているのでWeb系初心者に非常におすすめです。

OS
CentOS 7.4.1708

httpd
apache 2.4.6


IDCFクラウド管理コンソールでの準備

下図のようにHomePageServer01というマシンでWebサーバーが動いていて、https通信対応させたいとする。

ServerName.png


1. まずはIPアドレスメニューを開き、HomePageServer01が所属するIPアドレスをクリック

IPアドレス.png


2. 設定画面が出てくるので、ファイアウォールのタブを開き、https通信用のポート(443)を追加

FireWall.png


3. ポートフォワードタブでパブリックポートの443へのアクセスをHomepageServer01の443ポートへ転送するように設定

PortFoward.png

これで管理コンソールでの下準備は完了。


Let's Encryptから取得した証明書をapacheに適用してhttps通信をできるようにする

こちらは上で引用させてもらった記事の内容をそのままやりました。

Qiita:Let's Encryptで無料SSL証明書を取得する

コンソールでコマンドを叩いた後がちょっと面倒ですが

一度設定すればあとはコマンド一つで証明書の更新ができるのでとても楽ですね。

cronで定期的にコマンドを実行するようにすれば完全に自動で更新できます。

私は80日ごとに実行するように設定しました。


httpでのアクセスをすべてhttpsでリダイレクトさせる

※こちらはAPIではあまり推奨されていないようです。

 ブログやWebアプリで必要となってくるかも。

こちらの記事の設定をそのまま追加しました。

apacheでhttpへのアクセスをhttpsへ自動リダイレクトする

rewritemoduleとても便利。

ブログとAPIサーバーを同じマシンで運用してるので

APIへのアクセスの場合はリダイレクトさせずにErrorをきちんと返してあげる必要があるようです。

今後の課題ですね。


最後に

調べ始めてからものの30分ぐらいでhttps通信対応できました。

Let's Encrypt がわかりやすいのと先人の方のおかげではありますが、

Web周りのことの理解のスピードがどんどん上がっているのはとても嬉しい限りです。

APIの方も是非宜しくお願いします。