server-memo.net

apache+mod_ssl でSSL(SHA2版)

      2016/01/22

apache+mod_sslでSSL(SHA-2)の設定を行う方法です。
ちなみに、オレオレ証明書です。

SHA-2について

現在SSL証明書の暗号アルゴリズムがSHA-1からSHA-2(sha256)へ変更されているところです。

従来のSHA-1証明書は非推奨となっていて、2017年1月1日からはSSL通信が出来なくなったり、警告が表示されるようになります。

詳しくは、様のサイバートラスト(株)サイトに詳しい情報が記述されていますので参照していみてください。

作業の流れ

作業の流れ的は以下の通りとなります。

  1. 秘密鍵の作成
  2. CSR(証明要求書)作成
  3. 署名
  4. apache設定

秘密鍵の作成 (パスフレーズあり)

今回の手順では秘密鍵の公開鍵暗号化方式として、「RSA」を使用して作成します。

openssl書式

秘密鍵の作成には「openssl」コマンドを使用します。

openssl genrsa -[共通鍵暗号化方式] -out [秘密鍵名] [RSA鍵の長さ]

設定項目

「openssl」コマンドを実行する際の設定項目内容となります。

  • 共通鍵暗号化方式 「des3」や「aes」等を指定
  • 秘密鍵名 任意の名前でよいので、自分で分かりやすい名前を設定
  • 鍵の長さ 2048bit以上に設定

秘密鍵作成

今回は暗号化方式に「des3」を使用し、鍵の長さは「2048bit」の「server_sha256.key」という名前の秘密鍵を作成します。

また、秘密鍵は「/etc/httpd/conf/sslkey」というディレクトリを作成し、そこに格納していきます。

# mkdir /etc/httpd/conf/sslkey
# cd /etc/httpd/conf/sslkey
# openssl genrsa -des3 -out server_sha256.key 2048
Generating RSA private key, 2048 bit long modulus
..................................................................................+++
.............................................................................................+++
e is 65537 (0x10001)
Enter pass phrase for server_sha256.key:  <-- パスフレーズの入力
Verifying - Enter pass phrase for server_sha256.key: <--パスフレーズの入力

パーミッション(所有権)変更

秘密鍵を他のユーザに読まれたりされると、セキュリティ上問題がありますので、rootユーザのみファイルを読み込めるように、パーミッションを400に変更します。

# chmod 400 server_sha256.key

秘密鍵のパスフレーズ消去について

パスフレーズを設定した秘密鍵を使用すると、apacheの起動時に毎回パスフレーズを入力する必要があり、サーバの再起動時等もパスフレーズを入力しないとサービスが開始されません。

このままですと、不意のサーバ再起動時などにwebサービスだけが自動で復旧しないという事もあるので、セキュリティレベルは下がるのですが、秘密鍵からパスフレーズを消去したいと思います。

ただし、秘密鍵からパスフレーズを消去した際の、メリット・デメリットについて十分に検討してから、パスフレーズを消去するかどうか決めてください。

メリット

apache起動時にパスフレーズ入力の必要がないので、自動起動が可能です。

デメリット

秘密鍵と証明書が盗まれた場合、秘密鍵にパスフレーズが設定されていないので、証明書を悪用される危険性があります。

パスフレーズ消去

まずは、今ある秘密鍵のファイル名を変更してから、それを元にパスフレーズ無しの秘密鍵を作成していく流れとなります。

秘密鍵のファイル名変更

# mv server_sha256.key server_sha256.key_org

パスフレーズの消去

「openssl」コマンドで、名前を変更した秘密鍵を使用して、パスフレーズ無しの秘密鍵を作成していきます。

書式

「旧秘密鍵名」は、ファイル名変更後の秘密鍵ファイル名のことで、「秘密鍵名」はファイル名変更前の秘密鍵ファイル名となります。

openssl rsa -in [旧秘密鍵] -out [秘密鍵]
作業例

ファイル名を変更した旧秘密鍵である「server_sha256.key_org」を元に、パスフレーズ無しの秘密鍵を作成していきます。

# openssl rsa -in server_sha256.key_org -out server_sha256.key
Enter pass phrase for server_sha256.key_org: <--旧秘密鍵のパスフレーズを入力
writing RSA key

パーミッションの変更

新しく作成した、パスフレーズ無しの秘密鍵のパーミッションを400に変更します。

# chmod 400 server_sha256.key

秘密鍵のバックアップ

作成した秘密鍵は部外者の手の届かないところに、必ずバックアップをとっておきましょう。

この秘密鍵を紛失してしまうと、このあとこの秘密鍵を使って作成するSSL証明書が使用できなくなってしまいます。

※今回はオレオレ証明書を作成していくので、紛失しても再作成すれば良いのですが、本物のお金を払って申請したSSL証明書の場合、サーバのクラッシュ等で秘密鍵を紛失してしまうと、再度費用が発生してしまいます・・・

CSR作成

秘密鍵の作成が完了しましたら、次にCSR(Certificate Signing Request 証明書署名要請書)を作成していきます。

ちなみにオレオレ証明書ではなく、業者にSSL証明書の発行を依頼するに際に提出するのが、このCSRとなります。

CSR作成書式

CSRの作成も「openssl」コマンドを使用します。

openssl req -new -sha256 -key [秘密鍵名] -out CSRファイル名

SHA-2で証明書を作成する場合、「-sha256」と明示的に指定しないといけません。

設定内容

CSRを作成する際に、設定が必要な項目の一覧となります。

Country Name 国名 日本は「JP」となる
State or Province Name 都道府県名
Locality Name 市区町村名
Organization Name 会社や団体等の組織名
Organizational Unit Name 部署名 (空欄でも良いです)
Common Name ホスト名やドメイン名(SSL接続する際に使用するFQDN)を指定する ここを間違えるとSSLで接続のたびに警告が出るので十分に確認してください
Email Address 担当者メールアドレス 通常は空欄
A challenge password 証明書を破棄する際に、パスワードを設定する場合に入力 通常は空欄
An optional company name その他の組織名 通常は空欄

CSR作成

「server_sha256.csr」という名前のCSRを作成します。

# openssl req -new -sha256 -key server_sha256.key -out server_sha256.csr
Enter pass phrase for server_sha256.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Suginami
Organization Name (eg, company) [Default Company Ltd]:server-memo
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:local.server-memo.net
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

パーミッション(所有権)変更

他のユーザに読まれないように、作成したCSRのパーミッションを400に変更します。

# chmod 400 server_sha256.csr

証明書の作成

作成したCSRを使って、有効期限10年の証明書を作成していきます。

書式

# openssl x509 -in [CSRファイル名] -out [証明書ファイル名] -req -signkey [秘密鍵名] -sha256 -days [有効日数]

SSL証明書作成例

「server_sha256.crt」というSSL証明書を作成しています。

ここで使用している秘密鍵はパスフレーズを消去したものを使用しているので、パスフレーズの入力を求められていませんが、パスフレーズを消去していない場合は、パスフレーズの入力を求められます。

# openssl x509 -in server_sha256.csr -out server_sha256.crt -req -signkey server_sha256.key -sha256 -days 3650
Signature ok
subject=/C=JP/ST=Tokyo/L=Suginami/O=server-memo/CN=local.server-memo.net
Getting Private key

所有権(パーミッション)変更

作成した証明書のパーミッションを400に変更します。

# chmod 400 server_sha256.crt

以上でSSL証明書の作成は完了です、次にapacheの設定を行っていきます。

apache設定

SSL証明書を作成したので、作成した証明書でSSLを使えるように「apache」の設定を行っていきます。

ssl.conf設定変更

CentOSであれば、通常「/etc/httpd/conf.d/ssl.conf」がSSLの設定用ファイルとなりますので、これを「vi」等のエディターで設定していきます。

# cd /etc/httpd/conf.d
# cp -p ssl.conf ssl.conf_yyyymmdd
# vi ssl.conf

設定内容

「SSL証明書」と「秘密鍵」ファイルの場所を指定します。

証明書設定

「SSLCertificateFile」がSSL証明書の設定場所となるので、作成したSSL証明書を指定します。

SSLCertificateFile /etc/httpd/conf/sslkey/server_sha256.crt
秘密鍵設定

「SSLCertificateKeyFile」が秘密鍵の設定場所となるので、作成した秘密鍵を指定します。

SSLCertificateKeyFile /etc/httpd/conf/sslkey/server_sha256.key

設定反映

SSLの設定が完了しましたら、「apache」を再起動することで設定を反映させます。

※ファイアウォールで通信を制限している場合は、SSLのポートを開放も忘れずに行っておいてください。

CentOS7の場合

「systemctl」コマンドで

# systemctl restart httpd

CentOS6までの場合

# service httpd restart

秘密鍵にパスフレーズが設定されている場合

秘密鍵にパスフレーズを設定している場合は、「apache」を起動する際にパスフレーズの入力を求められますので、その場合は秘密鍵に設定しているパスフレーズを入力してください。

# systemctl restart httpd
Enter SSL pass phrase for local.server-memo.net:443 (RSA) : ********

動作確認

設定が完了しましたら、webブラウザでアクセスしSSLで通信できるか確認してください。

今回は「chrome」と「IE11」で確認してみました。

chromeでの確認

今回はオレオレ(自己証明)証明書なので、「プライバシーエラー」のメッセージが表示されるので、左下の「詳細設定」をクリックしてください。

sha200

画面下部に詳細情報が表示され、警告を無視してアクセスするためのリンクが表示されるので、それをクリックすることで、webサーバの画面を表示することが出来ます。

sha201

暗号アルゴリズムの確認

URL部分の鍵マーク部分をクリックすることで、サイト情報を表示させることができます。

sha202

表示されたサイト情報画面の「接続」タブを選択し、「証明書情報」をクリックします。

sha203

証明書情報が表示され、暗号アルゴリズムが「sha256(SHA2)」であることが確認できます。

sha204

IE11での確認

こちらの場合もオレオレ(自己署名)証明書なので、「プライバシーエラー」が表示されますが、「このサイトの閲覧を続行する(推奨されません)」をクリックして接続します。

sha205

暗号化アルゴリズムの確認

無事接続できましたら、URL欄の「証明書のエラー」部分をクリックします。

「証明書は信頼できません」ウィンドウが表示されるので、「証明書の表示を」クリックします。

sha206

「証明書」情報ウィンドウが表示されるので、「詳細」タブを選択すると暗号化アルゴリズムを確認することが出来ます。

sha207

以上となります。

 - apache