DEMOサーバーにSSLを設定したので次回楽になる為のメモ その3

DEMOサーバーにSSLを設定したので次回楽になる為のメモ その3

DEMOサーバーにSSLを設定したので次回楽になる為のメモ その3

SSL化のやる事リスト。1~7は以前の記事で(1~3 / 4~8

  1. mod_sslのインストール
  2. OpenSSLのインストール
  3. openssl.cnfで証明書期間の設定を行う
  4. 乱数ファイルの作成
  5. 秘密鍵の作成
  6. CSRの作成
  7. SSL証明書の発行手続き(申し込み)
  8. 証明書発行を待つ※認証局やサービスによって即日~数週間かかるものまである
  9. 発行された証明書をDL
  10. 中間証明もDL
  11. サーバーに証明書を配置
  12. /etc/httpd/conf.d/ssl.conf に証明書&Keyの場所を指示
  13. /etc/httpd/conf/httpd.conf に ssl.confの読込を指示
  14. sudo systemctl restart httpd  (Apache再起動)を実行してSSLの稼働を確認※https://で実際にアクセスしてみる
  15. 80番ポート⇒443のリダイレクトを設定する
  16. プログラム側の設定(サーバー設定や http://で組んでいるパーツ等)を改修する
  17. Apache再起動でパスワードを求められない様に設定する※サーバー再起動でそのまま立ち上がるように。
  18. sudo systemctl restart httpd  (Apache再起動) で設定完了

前回記事の続き書くのさぼってたらSSL化の記事へアクセスが増えていたので慌ててます。
と言う事で、今回は項目8~17について一気に行きます。

発行された証明書をダウンロードする

工程6で申請した証明書に対し無事発行が完了すると証明書をダウンロードできるようになります。
これは、証明書の発行申請をどのようなルートで行ったかにより『どこでダウンロードするか』が変わるので、其々の申請方法に合った場所の指示に従いましょう。

私の場合は通常利用している【さくらインターンネット】からの申請なので、さくらインターネットの場合の操作を記載します。さくらインターネット×JPRSの場合、証明書は申請から1時間後には発行されていました。

まず管理画面にログインします。

さくらインターネットSSL設定

【サーバー、SSL等サービスの確認ボタン】をクリックします。発行が完了していると、遷移先画面にSSLの項目が追加されていますので【サーバー証明書ボタン】をクリックします。

SSL証明書Download
遷移した画面の先で【サーバー証明書DLボタン】をクリックすると server.crt というファイルがダウンロードされます。
さくらインターネットSSL証明書ダウンロードこれでサーバー証明書のダウンロードは終わりです。

中間証明もダウンロードする

つぎは中間証明。
私の申請したJPRS SSLの場合は【JPRS のルート証明書・中間CA証明書について】のページから取得します。

サーバー証明書の発行日と認証型によって取得するファイルが異なるのでどれを取得するかは注意が必要です。
サーバー証明書も中間証明書も中身は次のような感じになっています。

SSL証明書イメージ

サーバーに証明書を配置する

ちなみに、ここまでの過程で/etc/httpd/confディレクトリは以下のようになっています。

【/etc/httpd/conf】
├── ssl.key/
│ ├── 乱数鍵ファイル/
│ └── server.key ※秘密鍵
└── ssl.csr/
└── server.csr ※csr

最終的には証明書を配置した場所をssl.confに書き入れるのでどこに置いてもいいのですが、一般的にという所で/etc/httpd/confの中に専用ディレクトリを作成し配置します。

サーバー証明書の設置

touchコマンド:タイムスタンプを変更する。ファイルが無い場合はファイルの作成も行う。

vim で開いたserver.crtファイルに【工程9】でダウンロードしたserver.crt値をコピペします。

無知な私はFTPでダウンロードしたファイル上げればいいんじゃね?などと思っていましたが、どうやら権限周りで色々問題がある様子。と言う事で、ちゃんとsudo vim を使って証明書の内容を貼り付けます。

中間証明書の設置

今度は工程10でダウンロードした中間証明書をコピペします。

お手本にはtouchで作成してからvimで編集をしていたためここではこのように記載しましたが、touchを飛ばしてvimで編集と新規作成を一気に行っても問題ありませんでした。

—–BEGIN CERTIFICATE—– と —–END CERTIFICATE—– も含め全てコピーします。

ここまでで私が混乱したパートがあります。

それは拡張子です。server.csr に server.crt 実は同じものだと勝手に勘違いしserver.csrにserver.crtの内容を上書きしてしまってました。そりゃNG食らうわけですよ。

この証明書の配置でフォルダ構成は以下のように変化しました。

【/etc/httpd/conf】
├── ssl.key/
│ ├── 乱数鍵ファイル/
│ └── server.key ※秘密鍵
├── ssl.csr/
│ └── server.csr ※csr
└── ssl.crt/
├── server.crt ※サーバー証明書
└── internal.crt ※中間証明書

/etc/httpd/conf.d/ssl.conf に証明書&Keyの場所を指示する

【工程1】mod_sslのインストールで /ehc/httpd/conf.d ディレクトリ配下に、ssl.confが作成されているはずです。
※vimコマンドを実行して何の値もない画面が出てきたらmod_sslのインストールに失敗しています。

DocumentRoot の設定などを除くと記載箇所は4か所です。バーチャルホストの設定もついでにしておきます。

バーチャルホストにも証明書の場所を記載します。

以下のように編集します。

/etc/httpd/conf/httpd.conf に ssl.confの読込を指示する

一番下に1行加えます。

アスタリスクを入れる事で、/etc/httpd/conf.d/ディレクトリの 拡張子.confのファイルをすべて読んでねとの指示になります。

sudo systemctl restart httpd  (Apache再起動)を実行してSSLの稼働を確認する

ここまでくると設定はほぼ終わりです。ただし、Apacheに変更した設定がまだ適応されてないので再起動します。

再起動が完了したら実際に【https:// 申請ドメイン名】でアクセスしてみます。

注意点は【工程6】で書いたURLにアクセスする事です。www.を付けて申請した場合はwwwを付けて確認してください。また、SSLはドメインに対してのセキュリティ証明なのでIPアドレスでアクセスも確認になりません。

意図したページが表示されたらOKです。

80番ポート⇒443のリダイレクトを設定する

現在の状態は80番と443番が両方とも生存している状態です。なので、http:// にアクセスしても何も問題なく利用できます。SSL化したのだから、80番(http)にアクセスしたら443番(https)で開きたいのが本音です。

と言う事で、リダイレクトの設定を行います。

作成しているツールがLaravelなのでLaravel流の設定方法です。

通常は(Laravelでもできますが).htaccess を以下のように編集します。

しかし、この記載方法の場合Laravelでは Form::open などでhttp://を案内される事がある様です。

したがって、ミドルウェアにリダイレクトを設定します。
■ミドルウェアを作成 ※kernelに登録するので名前は何でもOKです。

■ミドルウェアを編集 【プロジェクト\app\Http\Middleware\HttpsProtocol.php】

■カーネルにミドルウェアを登録 【プロジェクト\app\Http\kernel.php】

これで常時SSL化が完了しました。

プログラム側の設定(サーバー設定や http://で組んでいるパーツ等)を改修する

SSL化したのですが1点問題があります。

直接 プログラム作成中にhttp://から書いてしまったリンクはそのままになっています。
これは相当スマートではないので直します。

私はNetBeansIDEを使っているので変更は一気に終わりました。
Projectを選んで【 ファイル >> 編集 >> 置換 】これでhttp://を検索して https://に置換するだけ。

ヤベー、超便利。

Apache再起動でパスワードを求められない様に設定する

さて、上までの状態でしばらく運用していたのですが、大問題が発生しました。

アクセスするとサーバーに接続を落とされる

もうね、泣きそうですよ。必死に原因を探しました。

その結果わかった事。Apache起動してないんじゃない?
と言う事で、Apacheの状態を確認してみます。

やっぱり起動していない…。

原因は、さくらインターネットさんのメンテナンスによるサーバー再起動だったようです。

【工程5】で作成した秘密鍵の作成にて、Apacheの起動にパスワードが求められるようになっています。
その為、Serverが再起動してもApacheが立ち上がってこなかったわけです。
となると、やはりApacheの自動起動でパスワード承認を自動クリアさせる必要があります。

パスワード自動応答スクリプトを作成

パスワードを出力するshellを作成してこのshellをApache起動時に読み込むように設定します。場所は管理しやすい所でどこでもいいです。

起動時に使うパスワードを登録します。このパスワードに【工程4】で作った乱数を利用すればガードは固くなります。

ROOTのみで読み書きできるように鍵を書けます。

Apacheの設定ファイルにpass_ssl.shの場所を示します。

VirtualHostの中に書き入れると動かないのでその前に書く事。

SSL証明書をを複数管理している場合は、また別の方法になるみたいです。

sudo systemctl restart httpd  (Apache再起動) で設定完了

さぁ、再起動!

無事に動けばオールクリアです。

まとめ

SSL設定やること多いですよね。
でも覚えてしまえば早いんだろうなぁ~と実感している今日この頃です。
過去記事はこちらからどうぞ 【工程:1~3】/【工程:4~8