- Linux
- 2015-11-09 - 更新:2015-11-12
Googleが常時SSL接続になり、SEOでもそれが加味されるようになってきました。
また、Google検索からの流入を解析するためにも、自身側のSSL化が必要になってきます。
というのも、HTTPSからHTTPではリファラーが取得できないのです。
自身のサーバーをHTTPSにすればHTTPSからのリファラーを取得することができます。
HTTPSならHTTPからのリファラーも取得することができます。
それに当たって、今回はopensslの導入部分を解説させていただきます。
【バージョンについて】
apache2.2.31
openssl-0.9.8zg
※opensslのインストールディレクトリは/usr/local/sslとします。
【鍵のペア作成と証明書の作成】
SSL通信を利用するには次の3つが必要です。
1.秘密鍵
2.公開鍵+証明書申請情報
3.デジタル証明書
WEBサーバーの秘密鍵の作成
opensslのディレクトリに移動します。
cd /usr/local/ssl/private
秘密鍵作成のための疑似乱数を生成します。
例としてmd5ダイジェスト値を疑似乱数として使用します。
../bin/openssl md5 * > rand.dat
秘密鍵を作成します。
../bin/openssl genrsa -rand rand.dat -des3 1024 > server.key
コマンドを実行すると秘密鍵のパスフレーズを求められますので、
任意のパスフレーズを入力してください。
この秘密鍵は暗号解読の要となります。
他のユーザーに見られる(盗まれる)とSSL通信の意味がなくなりますので、
作成した後、パーミッションを変更しておきます。
chmod 400 server.key
genrsa | サブコマンド | RSA形式の秘密鍵を作成 |
---|---|---|
-des3 | オプション | トリプルDES方式でファイルを暗号化 |
1024 | オプション | 1024ビットで鍵を作成 |
WEBサーバーの公開鍵の作成
次にWEBサーバーのCSRファイルを作成します。
CSRファイルとは、公開鍵の情報のほかに、作成時に指定する組織名や組織の所在地などの情報を含むデータのことです。
このCSRファイルは認証局からデジタル証明書を発行してもらうときに必要になります。※ここポイント!
cd /usr/loca/ssl/certs ../bin/openssl req -new -key ../private/server.key > server.csr
または
../bin/openssl req -new -key ../private/server.key -out server.csr
コマンドを実行すると、秘密鍵のパスフレーズが求められます。
req | サブコメント | CSRファイルの作成 |
---|---|---|
-new | オプション | 新規にCSRファイルを作成 |
-key 鍵 | オプション | 秘密鍵のパス |
公開鍵の情報は以下のように順番に聞かれます。
Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Tokyo Locality Name (eg, city) []:Chuo-Ku Organization Name (eg, company) [Internet Widgits Pty Ltd]:Exam CO.LTD. Organizational Unit Name (eg, section) []:Eigyoubu Common Name (eg, YOUR name) []:WWW.EXAMPLE.JP Email Address []:admin@example.jp Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Organizational Unit Name、Email Addressは省略可です。
A challenge passwordは証明書を破棄する場合に必要になるパスワード、
An optional company nameは別の組織名がある場合、その組織名を入力します。これも省略可です。
作成した公開鍵もパーミッションを変更しておきます。
chmod 400 server.csr
デジタル証明書の作成
デジタル証明書はCA(認証局:Certificate Authority)に発行してもらうものですが、
テスト等のため、自分自身を認証局とすることができます。
cd /usr/local/ssl/certs ../bin/openssl x509 -in server.csr -days 365 -req -signkey ../private/server.key > server.crt
または
../bin/openssl x509 -in server.csr -days 365 -req -signkey ../private/server.key -out server.crt
コマンドを実行すると、秘密鍵のパスフレーズが求められます。
x509 | サブコマンド | X.509形式のデジタル証明書の作成 |
---|---|---|
-in | オプション | CSRファイルパスを指定 |
-days 日数 | オプション | 証明書の有効期限を指定(省略時は1ヶ月) |
-req | オプション | 入力ファイルがCSRファイルであることを指定 |
-signkey | オプション | 自己証明書生成時に使用するオプション。秘密鍵のパスを指定 |
作成したデジタル証明書もパーミッションを変更しておきます。
chmod 400 server.crt
デジタル証明書の内容を確認する
cd /usr/local/ssl/certs ../bin/openssl x509 -in server.crt -text -noout
apacheの設定を変更
apache2ディレクトリのconf/extra/httpd-ssl.confファイルを編集します。
先ほど作成した秘密鍵とデジタル証明書のファイルパスを設定します。
・デジタル証明書
SSLCertificateFile /usr/local/ssl/certs/server.crt
・秘密鍵
SSLCertificateKeyFile /usr/local/ssl/private/server.key
httpd.confを編集します。
以下の2行を探してコメント解除
#LoadModule ssl_module modules/mod_ssl.so #Include conf/extra/httpd-ssl.conf
最後にapacheを再起動して終了です。
秘密鍵のパスフレーズ入力を求められます。
/usr/local/apache2/bin/apachectl restart
秘密鍵のパスフレーズ入力を省略する(復号化)
作成したserver.keyをserver.tmpにリネームし、以下のコマンドを実行します。
cd /usr/local/ssl/private ../bin/openssl rsa in server.tmp > server.key
または
../bin/openssl rsa -in server.tmp -out server.key
テスト環境でのみ行うようにしてください。