ssl バーチャルドメイン apache

バーチャルホストでのSSL設定 Apache+mod_ssl

ssl バーチャルドメイン apache

安全なWEBサーバーを目指して

Amazonなどのお買いものをする時のアドレスってhttp://ほにゃらら.com
ではなくhttps//となっていると思います。
そういうページはユーザーとサーバーの間の通信が暗号化に使用しており
通販サイトではもはや必須の機能となっています。

誰だってそうです、顔の見えない通販だから
少しでも信頼できる安心なサイトから買いたいものですよね。

SSL設定の手順

※SSL環境構築の条件
・ApacheのWEBサーバーを構築済み
・独自ドメインを取得済みでドメインでWEBにアクセスできる

【オレオレ自己署名サーバー認証局の場合】

〇手順

1. 秘密鍵.keyを作成
2. 秘密鍵を使って認証局への申請書.csrファイルを作成
3. .csrファイルを使ってサーバー証明書.crtファイルを発行する

〇WEBサーバーに設定するもの

・ 秘密鍵.key
・ オレオレサーバー証明書.crt

【※正規の認証局に申請する場合】

〇手順
1. 秘密鍵.keyを作成
2. 秘密鍵を使って認証局への申請書.csrファイルを作成
3. 認証局(ベリサインなど)にサーバー申請書の.csrを提出する
4. 認証局からサーバー証明書.crt、中間CA証明書が送られてくる。
5. 中間CA証明書とクロスルート証明書の混合した.cerを生成する。

〇WEBサーバーに設定するもの
・ 秘密鍵.key
・ 正規のサーバー証明書.crt
・ 中間CA証明書とクロスルート証明の混合ファイル.cer

が必要です。
SSL自体は秘密鍵.keyとサーバー証明書.crtの2つがあれば
実現できます。

RapidSSLなど格安の正規の認証局を使えば1500円前後で
サーバー証明書を発行して貰う事も可能です。
通販サイトの場合は顧客の信頼に繋がる部分でもあるので
多少高価でも知名度の高い認証局を選ぶ事をお勧めします。

今回は記事用なのでお金をかけずオレオレ認証局でのSSLを実現してみます。
まずはSSLに必要なモジュールをインストールします。

[bash] # yum install openssl
# yum -y install mod_ssl
[/bash]

サーバー証明書を作るスクリプトがあるところに移動します。

[bash] # cd /etc/pki/tls/certs
[/bash]

【.keyファイル 秘密鍵生成】

[bash] # make server.key
または
certs]# openssl genrsa -aes128 2048 > 20141007server.key
[/bash]

Generating RSA private key, 2048 bit long modulus
……………+++
…………..+++
e is 65537 (0x10001)
Enter pass phrase:パスフレーズ入力
Verifying – Enter pass phrase:パスフレーズ入力

【確認します】

[bash] certs]# ls
20141007server.key Makefile ca-bundle.crt ca-bundle.trust.crt
localhost.crt make-dummy-cert renew-dummy-cert
[/bash]

keyファイル(秘密鍵)が出来てます

【csr発行 認証機関への申請書】

[bash] certs]# make server.csr
または
certs]# openssl req -utf8 -new -key 20141007server.key -out 20141007server.csr

Enter pass phrase for 20141007server.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]:Akihabara←市区町村名
Organization Name (eg, company) [Default Company Ltd]:jibanyanwatcher←組織名
Organizational Unit Name (eg, section) []:IT Dept←部署名
Common Name (eg, your name or your server’s hostname) []:www.hoge.net←FQDN
Email Address []:root@hoge.net←管理者連絡先

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:←空エンター
An optional company name []:←空エンター
[/bash] [bash] certs]# ls
20141007server.csr Makefile ca-bundle.trust.crt make-dummy-cert
20141007server.key ca-bundle.crt localhost.crt renew-dummy-cert
[/bash]

csrファイルが出来てますね。

【.crtファイル 自己署名証明書発行】

商用ではcsrファイルを認証局(ベリサインなど)に提出し
.crt署名証明書ファイルを貰いますが、今回はオレオレ認証局なので
自分で署名を発行します。

※公開ページの場合、自己署名では警告が出るのでつけないほうがいいです。

[bash] certs]# openssl x509 -in 20141007server.csr -out 20141007server.crt -req -signkey 20141007server.key -days 3650

Signature ok
subject=/C=JP/ST=Tokyo/L=Akihabara/O=jibanyanwatcher/OU=IT Dept/CN=www.hoge.net/emailAddress=root@hoge.net
Getting Private key
Enter pass phrase for 20141007server.key:パスフレーズ入力
[/bash] [bash] certs]# ls
20141007server.crt 20141007server.key ca-bundle.crt localhost.crt renew-dummy-cert
20141007server.csr Makefile ca-bundle.trust.crt make-dummy-cert
[/bash]

バーチャルホストファイルを設定します。
個別につくることで複数のWEBサイトにSSLを設定することが可能です。

[bash] # vi /etc/httpd/conf.d/hoge.net.conf

<VirtualHost *:80>
ServerName hoge.net
DocumentRoot /home/hoge.net/public_html/Serverdir/
ErrorLog logs/virtual-error_log
CustomLog logs/virtual-access_log combined env=!no_log
&lt;Directory “/home/hoge.net/public_html/Serverdir/”&gt;
AllowOverride all
</Directory>
</VirtualHost>

↓変更します。

<VirtualHost *:443>
ServerName hoge.net
DocumentRoot /home/hoge.net/public_html/Serverdir/
ErrorLog logs/virtual-error_log
CustomLog logs/virtual-access_log combined env=!no_log
&lt;Directory “/home/hoge.net/public_html/Serverdir/”&gt;
AllowOverride all
</Directory>

SSLEngine on
#SSLCertificateChainFile /etc/httpd/conf/ssl.crt/server.cer
SSLCertificateFile /etc/pki/tls/certs/20141007server.crt
SSLCertificateKeyFile /etc/pki/tls/certs/20141007server.key
</VirtualHost>
[/bash]

設定をWEBサーバーに反映させます。わくわく
[bash] # service httpd restart
httpd を停止中: [失敗] httpd を起動中: [Tue Oct 07 23:06:16 2014] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server hoge.net:443 (RSA)
Enter pass phrase:パスフレーズ入力します。

OK: Pass Phrase Dialog successful.
[ OK ] [/bash]

アクセスします。

https://www.hoge.net/

sslの設定

警告マークが出たら成功です。
※商用の正式な認証局から認証されたcrtファイルを登録していれば
警告マークはでません。

中間CA証明書とルート証明書の混合ファイル cerファイル

※#SSLCertificateChainFile /etc/httpd/conf/ssl.crt/server.cer

と今回無効にしましたが、
これは中間証明書とルート証明書の混合ファイルの指定です。
認証局にサーバー申請書csrファイルを提出すると、
サーバ証明書crtファイルのほかに
中間CA証明書も送付されます。
その中間CA証明書にクロスルート証明書を追記したファイルが混合ファイルcerです。

ルートCAについては下記サイトを。
http://valuessl.net/support/intermediate.php

[bash] # vi /etc/httpd/conf/ssl.crt/20141007server.cer

※メールに記載された中間CA証明書

—–BEGIN CERTIFICATE—–
MIIF7DCCBNSgAwIBAgIQbsx6pacDIAm4zrz06VLUkTANBgkqhkiG9w0BAQUFADCB
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
aG9yaXR5IC0gRzUwHhcNMTAwMjA4MDAwMDAwWhcNMjAwMjA3MjM1OTU5WjCBtTEL

GzEZMBcGA1UEAxMQVmVyaVNpZ25NUEtJLTItNjAdBgNVHQ4EFgQUDURcFlNEwYJ+
HSCrJfQBY9i+eaUwHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6Aq8zMTMwDQYJ
KoZIhvcNAQEFBQADggEBAAyDJO/dwwzZWJz+NrbrioBL0aP3nfPMU++CnqOh5pfB
WJ11bOAdG0z60cEtBcDqbrIicFXZIDNAMwfCZYP6j0M3m+oOmmxw7vacgDvZN/R6
bezQGH1JSsqZxxkoor7YdyT3hSaGbYcFQEFn0Sc67dxIHSLNCwuLvPSxe/20majp
dirhGi2HbnTTiN0eIsbfFrYrghQKlFzyUOyvzv9iNw2tZdMGQVPtAhTItVgooazg
W+yzf5VK+wPIrSbb5mZ4EkrZn0L74ZjmQoObj49nJOhhGbXdzbULJgWOw27EyHW4
Rs/iGAZeqa6ogZpHFt4MKGwlJ7net4RYxh84HqTEy2Y=
—–END CERTIFICATE—–

※クロスルート証明書(必ずクロスルート証明書は下に)

—–BEGIN CERTIFICATE—–
MIIE0DCCBDmgAwIBAgIQJQzo4DBhLp8rifcFTXz4/TANBgkqhkiG9w0BAQUFADBf
MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsT
LkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
HhcNMDYxMTA4MDAwMDAwWhcNMjExMTA3MjM1OTU5WjCByjELMAkGA1UEBhMCVVMx

j+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29t
L3ZzbG9nby5naWYwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8v
b2NzcC52ZXJpc2lnbi5jb20wPgYDVR0lBDcwNQYIKwYBBQUHAwEGCCsGAQUFBwMC
BggrBgEFBQcDAwYJYIZIAYb4QgQBBgpghkgBhvhFAQgBMA0GCSqGSIb3DQEBBQUA
A4GBABMC3fjohgDyWvj4IAxZiGIHzs73Tvm7WaGY5eE43U68ZhjTresY8g3JbT5K
lCDDPLq9ZVTGr0SzEK0saz6r1we2uIFjxfleLuUqZ87NMwwq14lWAyMfs77oOghZ
tOxFNfeKW/9mz1Cvxm1XjRl4t7mi0VfqH5pLr7rJjhJ+xr3/
—–END CERTIFICATE—–
[/bash]

おまけ .htaccessを使って特定のページやディレクトリに設定

amazon ssl
amazonなどはログインページなど一部のページのみに認証を設定しています。
.htaccessを使って設置を行うことでサイト全体ではなく
必要な部分のみにSSLを設定するやり方です。

[bash] # vi .htaccess

RewriteEngine on

RewriteCond %{REQUEST_URI} .*/ssl_contact.php$ [OR] RewriteCond %{REQUEST_URI} .*/ssl_login.php$ [OR] RewriteCond %{REQUEST_URI} .*/ssl_dir/.*$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteCond %{REQUEST_URI} !(.*/ssl_contact.php$)
RewriteCond %{REQUEST_URI} !(.*/ssl_login.php$)
RewriteCond %{REQUEST_URI} !(.*/ssl_dir/.*$)
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L] [/bash]

ssl_contact.phpとssl_login.php
およびssl_dirのみがSSL対応(https)になるようになりました。

ssl バーチャルドメイン apache
最新情報をチェックしよう!
>システム構築・保守に特化した会社です。

システム構築・保守に特化した会社です。

システムの構築・保守運用「システムガーディアン」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG