自分で立てたAPIでSSL通信をさせようと思った
こちらの記事(翻訳: WebAPI 設計のベストプラクティス)を見てAPIはSSL通信であるべきということだったので
で公開した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通信対応させたいとする。
1. まずはIPアドレスメニューを開き、HomePageServer01が所属するIPアドレスをクリック
2. 設定画面が出てくるので、ファイアウォールのタブを開き、https通信用のポート(443)を追加
3. ポートフォワードタブでパブリックポートの443へのアクセスをHomepageServer01の443ポートへ転送するように設定
これで管理コンソールでの下準備は完了。
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の方**も是非宜しくお願いします。