ブログ
ブラウザがSSL対応を迫る
弊社ではユーザーIDとパスワードを入力するログイン画面があるようなサーバーサイドプログラムを開発しています。
そんな開発の仕事をしていたある日、Firefoxの更新を自動的にインストールするようにしていたため、バージョンが52.0に上がってしまいました。
これにより、ユーザーIDやパスワードのテキストボックスに以下のような警告が表示されるようになりました。
世の中はセキュリティ重視という流れであろうということで、OpenSSLを使用してサイトをSSL化することにします。
この項以降パスフレーズを度々入力しますが、予め英数字大文字小文字交じりの類推されにくい文字列を適宜決定してメモ帳等に入力しておき、コピペできるようにしておくと便利でしょう。
またこのパスフレーズは決して忘れないように注意して下さい。
有効期限の日数は任意です。ここではうるう日が最大2回あっても大丈夫なように6年と2日に相当する日数としています。
そんな開発の仕事をしていたある日、Firefoxの更新を自動的にインストールするようにしていたため、バージョンが52.0に上がってしまいました。
これにより、ユーザーIDやパスワードのテキストボックスに以下のような警告が表示されるようになりました。
この接続は安全ではありません。ここに入力したログイン情報は漏えいする可能性があります。これはアドレスがhttpsで始まる暗号化通信に変更することで表示されなくなるのですが、サイト自体がSSLに未対応であればその手は使えません。
世の中はセキュリティ重視という流れであろうということで、OpenSSLを使用してサイトをSSL化することにします。
ご注意 : 本稿は、既にhttp://(ドメイン名)の書式で閲覧可能なバーチャルホストが構成されているサイトを、アドレスがhttps://(ドメイン名)の書式で閲覧できるようにする場合の記述です。
なお、システム環境は次の通りです。またバージョンは本稿作成時のものです。
なお、システム環境は次の通りです。またバージョンは本稿作成時のものです。
- OS
- Windows 8.1 64bit
- XAMPP
- XAMPP for Windows 5.6.8
なお、インストールフォルダはC:\xamppとし、
ドキュメントルートはD:/home/(ドメイン名)/wwwとしたものとして記述します。 - OpenSSL
- Win64 OpenSSL v1.1.0e
OpenSSLのダウンロード
OpenSSLプログラムのインストールプログラムを入手します。- インストールプログラムのダウンロードサイトShining Light Productionsサイトへアクセスします。
- ページ中段のWin64 OpenSSL v1.1.0eリンクのファイルを保存します。
OpenSSLのインストール
ダウンロードしたOpenSSLプログラムを、サーバーとするパソコンにインストールしていきます。- ダウンロードしたインストールプログラムをダブルクリックします。
- ユーザーアカウント制御ウィンドウが表示されますので、はい(Y)ボタンをクリックします。
- License Agreementパネルが表示されますので、I accept the agreementラジオボタンをチェックして、Next>ボタンをクリックします。
- Select Destination Locationパネルが表示されますので、インストールフォルダの指定をデフォルトのC:\OpenSSL-Win64のままとして、Next>ボタンをクリックします。
- Select Additional Tasksパネルが表示されますので、The OpenSSL binaries (/bin) directoryラジオボタンをチェックし、Next>ボタンをクリックします。
- 最後に寄付の多寡を決めるパネルが表示されますので、いずれかをのチェックボックスをチェックし、Finishボタンをクリックします。
なお、寄付を後でする場合はオフとすることもできるようです。
OpenSSLインストール後の設定
前項の手順4で指定したOpenSSLプログラムのインストールフォルダに基づいて、Windowsの環境変数を変更します。- コントロールパネルからシステムメニューをクリックします。
- システムのプロパティウィンドウの詳細設定タブをクリックします。
- 環境変数(N)ボタンをクリックします。
- システム環境変数(S)リストの中からPathを探してクリックします。
- 編集(I)ボタンをクリックします。
- システム変数の編集ウィンドウの変数値(V)テキストボックスの末尾にセミコロンを入力した後、続けてOpenSSLプログラムの保存場所を入力します。
今回の例ではC:\OpenSSL-Win64\binと入力します。 - OKボタンをクリックしてシステム変数の編集ウィンドウを閉じます。
- OKボタンをクリックして環境変数ウィンドウを閉じます。
- コマンドプロンプトを起動してOpenSSL versionとコマンドを入力し、Enterキーを押してOpenSSLのバージョンが表示されること確認します。
サーバ用秘密鍵の作成
OpenSSLプログラムのインストールが完了しましたら、まずはサーバ用秘密鍵を作成します。この項以降パスフレーズを度々入力しますが、予め英数字大文字小文字交じりの類推されにくい文字列を適宜決定してメモ帳等に入力しておき、コピペできるようにしておくと便利でしょう。
またこのパスフレーズは決して忘れないように注意して下さい。
- コマンドプロンプトで、以下のコマンドを入力し、Enterキーを押してカレントディレクトリを変更します。
cd C:\OpenSSL-Win64\bin
- 続いて以下のコマンドを入力し、Enterキーを押します。
openssl genrsa -rand rand.dat -des3 -out (ドメイン名).key 2048
- Enter pass phrase for (ドメイン名).key:と表示されますので、任意のパスフレーズを入力し、Enterキーを押します。
- Verifying - Enter pass phrase for (ドメイン名).key:と表示されますので、同じパスフレーズを入力し、Enterキーを押します。
署名要求書の作成
認証局への署名要求書を作成します。後述のCommon Nameをドメイン名にするのがポイントです。- コマンドプロンプトで、以下のコマンドを入力し、Enterキーを押します。
openssl req -new -key (ドメイン名).key -out (ドメイン名).csr
- Enter pass phrase for dyndns.biz.key:と表示されますので、前掲のパスフレーズを入力し、Enterキーを押します。
- Country Name (2 letter code) [AU]:と表示されますので、JPと入力し、Enterキーを押します。
- State or Province Name (full name) [Some-State]:と表示されますので、(都道府県名)と入力し、Enterキーを押します。
- Locality Name (eg, city) []:と表示されますので、(市町村名)と入力し、Enterキーを押します。
- Organization Name (eg, company) [Internet Widgits Pty Ltd]:と表示されますので、(組織名)と入力し、Enterキーを押します。
- Organizational Unit Name (eg, section) []:と表示されますので、(部署名)と入力し、Enterキーを押します。
- Common Name (e.g. server FQDN or YOUR name) []:と表示されますので、(ドメイン名)と入力し、Enterキーを押します。
- Email Address []:と表示されますので、何も入力せずにEnterキーを押します。
- A challenge password []:と表示されますので、何も入力せずにEnterキーを押します。
- An optional company name []:と表示されますので、何も入力せずにEnterキーを押します。
サーバー証明書を作る
署名要求書にサーバ用秘密鍵で署名し、有効期限が2192日のサーバー証明書を作ります。有効期限の日数は任意です。ここではうるう日が最大2回あっても大丈夫なように6年と2日に相当する日数としています。
- コマンドプロンプトで、以下のコマンドを入力し、Enterキーを押します。
openssl x509 -req -days 2192 -sha1 -in (ドメイン名).csr -signkey (ドメイン名).key -out (ドメイン名).crt
- Enter pass phrase for (ドメイン名):と表示されますので、前掲のパスフレーズを入力し、Enterキーを押します。
サーバ用秘密鍵の後処理
サーバ用秘密鍵からパスフレーズを削除します。- コマンドプロンプトで、以下のコマンドを入力し、Enterキーを押します。
openssl rsa -in (ドメイン名).key -out (ドメイン名).key
- Enter pass phrase for (ドメイン名):と表示されますので、前掲のパスフレーズを入力し、Enterキーを押します。
本番フォルダに格納する
出来上がったサーバ用秘密鍵、署名要求書、サーバー証明書を、各々以下の本番用フォルダにコピーします。- サーバ用秘密鍵
- "C:\xampp\apache\conf\ssl.key"
- 署名要求書
- "C:\xampp\apache\conf\ssl.csr"
- サーバー証明書
- "C:\xampp\apache\conf\ssl.crt"
ブラウザに証明書をインポート
弊社はFirefoxでテストをしていますので、下記の手順で行います。なおMicrosoft Edgeはどうやるのか分からなかったので、そこは宿題です。- Firefoxを起動します。
- メニューバーのツールメニュー → オプション(O)メニューをクリックします。
- オプションタブの詳細メニューをクリックします。
- 証明書メニューをクリックします。
- 証明書を表示(C)...ボタンをクリックします。
- 証明書マネージャウィンドウの証明局証明書メニューをクリックします。
- インポート(M)...ボタンをクリックします。
- 前項でサーバー証明書をコピーしたC:\xampp\apache\conf\ssl.crtフォルダからサーバー証明書ファイルをクリックします。
- 開く(O)ボタンをクリックします。
- 証明書のインポートウィンドウのこの認証局によるウェブサイトの識別を信頼するチェックボックスをチェックし、OKボタンをクリックします。
- 証明書マネージャウィンドウのOKボタンをクリックします。
- オプションタブを閉じます。
httpd-ssl.confを編集する
Apacheのバーチャルホスト用SSL設定ファイルを編集して作業の最終段階に入ります。- エクスプローラーで、C:\xampp\apache\conf\extraフォルダを開きます。
- httpd-ssl.confファイルをメモ帳等のエディタソフトで開きます。
の文字列がある行を検索し、その行の前に以下を追加します。
NameVirtualHost *:443
- 以下の4行は、httpd-ssl.confファイルと同じフォルダ内のhttpd-vhosts.confファイルの当該ドメインの設定部分と同じにします。
- DocumentRoot "C:/xampp/htdocs"
- ServerName www.(ドメイン名):443
- ServerAdmin admin@(ドメイン名)
- ErrorLog "C:/xampp/apache/logs/error.log"
- SSLCertificateFile "conf/ssl.crt/server.crt"を以下のように変更します。
SSLCertificateFile "conf/ssl.crt/(ドメイン名).crt"
- SSLCertificateKeyFile "conf/ssl.key/server.key"を以下のように変更します。
SSLCertificateKeyFile "conf/ssl.key/(ドメイン名).key"
- TransferLog "C:/xampp/apache/logs/access.log"の文字列がある行を検索し、その行の前に次の3行を追加します。
<IfModule log_config_module>
CustomLog "C:/xampp/apache/logs/(ドメイン名)-access.log" combined
</IfModule> - </VirtualHost>の文字列で終わる行を検索し、その行の前に次の4行を追加します。
<Directory "D:/home/(ドメイン名)/www">
AllowOverride All
Require all granted
</Directory>