- PR -

一台ののサーバーでバーチャルSSLの方法を教えてください。

投稿者投稿内容
ottoto
常連さん
会議室デビュー日: 2003/02/05
投稿数: 24
投稿日時: 2004-04-30 10:52
こんにちは。

一台のWebServer(apache2.0.49)でSSL(OpenSSL)を二つ立てることで困ってます。
仮想サイトごとにIPアドレス1個ずつ必要なのはわかりますが、
apacheをSSL起動したとき、1サイトしかSSLしか有効になりません。

詳細=
1台のServerでバーチャルでaaa.com、bbb.comの両ドメインをSSLとして
使用したい。


元のServerのIP(eth0)が172.16.0.1/24
ifconfig eth0:1 172.16.0.2 netmask 255.255.255.0
でもう一つIPを振り分けました。
apacheの設定は

<IfModule mod_ssl.c>
Include conf/ssl.conf
</IfModule>



<VirtualHost 172.16.0.1>
ServerAdmin webmaster@aaa.com
DocumentRoot /home/aaa/www
ServerName www.aaa.com
</VirtualHost>

<VirtualHost 172.16.0.2>
ServerAdmin webmaster@bbb.com
DocumentRoot /home/bbb/www
ServerName www.bbb.com
</VirtualHost>
IPベースのバーチャルホストの設定をしました。

ssl.confは
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin

<IfDefine SSL>

Listen 172.16.0.1:443
Listen 172.16.0.2:443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl

SSLPassPhraseDialog builtin

SSLSessionCache dbm:/usr/local/apache2/logs/ssl_scache

SSLSessionCacheTimeout 300

SSLMutex file:/usr/local/apache2/logs/ssl_mutex

<VirtualHost 172.16.0.1:443>
DocumentRoot "/home/aaa/www"
ServerName www.aaa.com:443
ServerAdmin webmaster@waaa.com

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/ssl/certs/certa.pem
SSLCertificateKeyFile /usr/local/ssl/private/keya.pem

<Files ~ "\\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/usr/local/apache2/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

SetEnvIf User-Agent ".*MSIE.*" \\
nokeepalive ssl-unclean-shutdown \\
downgrade-1.0 force-response-1.0

CustomLog /usr/local/apache2/logs/ssl_request_log \\
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \\"%r\\" %b"

</VirtualHost>

<VirtualHost 172.16.0.2:443>

# General setup for the virtual host
DocumentRoot "/home/bbb/www"
ServerName www.bbb.com:443
ServerAdmin webmaster@bbb.com

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

SSLCertificateFile /usr/local/ssl/certs/certb.pem

SSLCertificateKeyFile /usr/local/ssl/private/keyb.pem

<Files ~ "\\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/usr/local/apache2/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \\
nokeepalive ssl-unclean-shutdown \\
downgrade-1.0 force-response-1.0
CustomLog /usr/local/apache2/logs/ssl_request_log \\
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \\"%r\\" %b"

</VirtualHost>
</IfDefine>

のように設定してapacheを起動しても、
bbb.comの方しかSSLが起動しません。
ssl.confの<VirtualHost>の記述を逆にするとaaa.comしか起動しません。

どこをどう変更すれば、2つSSLが起動するのでしょうか?
長々と書いてしまって申し訳ありません。
よろしくお願いします。
たて
常連さん
会議室デビュー日: 2003/12/18
投稿数: 39
お住まい・勤務地: 沖縄
投稿日時: 2004-04-30 11:20
こんにちはottoto様

SSLの場合だとAPACHEより先にSSL認証が走るので1つのサイトしか運用出来なかったように記憶しています。
2.0.48ではそうだったような・・・・

識者の方フォロー願います (^ ^;

[ メッセージ編集済み 編集者: たて 編集日時 2004-04-30 11:23 ]
ottoto
常連さん
会議室デビュー日: 2003/02/05
投稿数: 24
投稿日時: 2004-04-30 11:24
たて様、返答ありがとうございます。
SSLの場合だとAPACHEより先にSSL認証が走るのはわかりますが、
IPをわけることで、何とか回避できないものなんでしょうか?
やっぱり、無理なんでしょうか。。。。
たて
常連さん
会議室デビュー日: 2003/12/18
投稿数: 39
お住まい・勤務地: 沖縄
投稿日時: 2004-04-30 12:03
すいませんでした。。IPベースだったら出来ますねぇ・・・

以下httpd.conf

<VirtualHost 172.16.0.1:80> ←:80を追加
ServerAdmin webmaster@aaa.com
DocumentRoot /home/aaa/www
ServerName www.aaa.com
</VirtualHost>

<VirtualHost 172.16.0.2:80> ←:80を追加
ServerAdmin webmaster@bbb.com
DocumentRoot /home/bbb/www
ServerName www.bbb.com
</VirtualHost>

httpd.confを上の様にしてもダメでしょうか?
ottoto
常連さん
会議室デビュー日: 2003/02/05
投稿数: 24
投稿日時: 2004-04-30 12:12
返答ありがとうございます。
httpd.confを
<VirtualHost 172.16.0.1:80>
に設定しても一つしか、動きませんでした。

httpd.confやssl.confの”Listen”等を変更するのでしょうか??
やってみたんですが。。。
たて
常連さん
会議室デビュー日: 2003/12/18
投稿数: 39
お住まい・勤務地: 沖縄
投稿日時: 2004-04-30 13:24
上手くいきませんか・・・
出来れば以下について教えて頂けますか?

 動作確認でそのサイトにアクセスするときは外からですか?内からですか?
 IPアドレスでのアクセスですか?ドメインでのアクセスですか?
 内向きのDNSって動いてますか?
 hostsファイルは変更してありますか?
ottoto
常連さん
会議室デビュー日: 2003/02/05
投稿数: 24
投稿日時: 2004-04-30 14:14
何度もありがとうございます。

>動作確認でそのサイトにアクセスするときは外からですか?内からですか?
外からのアクセスになります。
 
>IPアドレスでのアクセスですか?ドメインでのアクセスですか?
ドメインでのアクセスになります。

>内向きのDNSって動いてますか?
内向きDNSは動いていています。
 
>hostsファイルは変更してありますか?
hostsファイル?は変更しておりません。
どこか変更しないといけないのでしょうか?


・追加で質問なのですが、
現状SSLはapacheベリサインお試し版を使用しております。
aaa.comと、bbb.comにつきまして、それぞれCSRを生成し、サーバーIDを
取得しました。
秘密鍵のパスフレーズを二つとも、同じものにしてあります。(仮にabc)
そして、お試し版ルート証明書も2つ取得しました。

この状況でapacheをssl起動させると
#/usr/local/apache2/bin/apachectl startssl
Apache/2.0.49 mod_ssl/2.0.49 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide us with the pass phrases.

Server www.aaa.com:443 (RSA)
Enter pass phrase:abc

Ok: Pass Phrase Dialog successful.

のように、aaa.comのパスしか聞かれないのです。
ですが、お試し版ルート証明書をクライアントにインストールし、
https://www.aaa.com/とhttps://www.bbb.com/にそれぞれアクセス
したところ、正常にアクセスでき、証明書の情報を見ても、
https://www.aaa.com/は
発行先
www.aaa.com
発行者
VeriSign
有効期限
2004/04/28から2004/05/13

https://www.bbb.com/
発行先
www.bbb.com
発行者
VeriSign
有効期限
2004/04/28から2004/05/13
となっています。

この状態って、正常に2ドメインともSSL認証しているのでしょうか?
また、
Server www.aaa.com:443 (RSA)
Enter pass phrase:
Ok: Pass Phrase Dialog successful.
のように、aaa.comのパスしか聞かれなくても、正常に
2ドメインともSSL認証しているのでしょうか?

申し訳ありません。
SSLのこと殆どしらないので、くだらない質問かもしれません。
よろしくお願いします。
たて
常連さん
会議室デビュー日: 2003/12/18
投稿数: 39
お住まい・勤務地: 沖縄
投稿日時: 2004-04-30 15:15
外からのアクセスであればhostsファイルは関係無いですね。内向きのDNSがあるようですし。

ssl.confのこの部分↓は
Listen 172.16.0.1:443
Listen 172.16.0.2:443

Listen 443で良いと思います。

httpの方はドメインで両方アクセスできてますよね?

ドメインごとに証明書は必要です。私の場合は通信の暗号化が目的でしたので、自分がCAになってサーバー証明書を発行しました。ベリサインお試し版でも同じだとは思います。

以下にその時の手順を書いておきます。
【CA用秘密鍵発行】
#openssl genrsa -des3 -out ca.key -rand rand.dat 1024
 718 semi-random bytes loaded
 Generating RSA private key, 1024 bit long modulus

 e is 65537 (0x10001)
 Enter PEM pass phrase:xxx              ← CA用パスフレーズ
 Verifying password - Enter PEM pass phrase:xxx ← CA用パスフレーズ

【CA用証明書発行】
# openssl req -new -x509 -days 365 -key ca.key -out ca.crt
 Using configuration from /usr/share/ssl/openssl.cnf
 Enter PEM pass phrase:xxxxx               ← CA用パスフレーズ
 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) [GB]:JP (国コード)
 State or Province Name (full name) [Berkshire]:okinawa (都道府県名)
 Locality Name (eg, city) [Newbury]:Ishigaki (市町村名)
 Organization Name (eg, company) [My Company Ltd]:Pri_CA (組織名)
 Organizational Unit Name (eg, section) []:Admin (組織内ユニット名)
 Common Name (eg, your name or your server's hostname) []:aaa.com (サーバ名)
 Email Address []:aaa@aaa.com (メールアドレス)

【サーバー用秘密鍵の発行】
# openssl genrsa -des3 -out server.key -rand rand.dat 1024
 718 semi-random bytes loaded
 Generating RSA private key, 1024 bit long modulus

 e is 65537 (0x10001)
 Enter PEM pass phrase:yyy        ← サーバ用パスフレーズ
 Verifying password - Enter PEM pass phrase:yyy ← サーバ用パスフレーズ

【サーバー用公開鍵の発行】
# openssl req -new -key server.key -out server.csr
 Using configuration from /usr/share/ssl/openssl.cnf
 Enter PEM pass phrase:yyy          サーバ用パスフレーズ入力
 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) [GB]:JP (国コード)
 State or Province Name (full name) [Berkshire]:okinawa (都道府県名)
 Locality Name (eg, city) [Newbury]:Ishigaki (市町村名)
 Organization Name (eg, company) [My Company Ltd]:AAA.COM (組織名)
 Organizational Unit Name (eg, section) []:Admin (組織内ユニット名)
 Common Name (eg, your name or your server's hostname) []:aaa.com
 Email Address []:aaa@aaa.com (管理者メールアドレス)

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

【サーバー用証明書の発行】
# /usr/local/src/mod_ssl-2.8.11-1.3.27/pkg.contrib/sign.sh server.csr
 CA signing: server.csr -> server.crt:
 Using configuration from ca.config
 Enter PEM pass phrase:xxx           ← CA用パスフレーズ
 Check that the request matches the signature
 Signature ok
 The Subjects Distinguished Name is as follows
 countryName :PRINTABLE:'JP'
 stateOrProvinceName :PRINTABLE:'Okinawa'
 localityName :PRINTABLE:'Ishigaki'
 organizationName :PRINTABLE:'AAA.COM'
 organizationalUnitName:PRINTABLE:'Admin'
 commonName :PRINTABLE:'aaa.com'
 emailAddress :IA5STRING:'aaa@aaa.com'
 Certificate is to be certified until 13:09:20 2004 GMT (365 days)
 Sign the certificate? [y/n]:y


 1 out of 1 certificate requests certified, commit? [y/n]y
 Write out database with 1 new entries
 Data Base Updated
 CA verifying: server.crt <-> CA cert
 server.crt: OK

この手順でaaa.comとbbb.com用に行いました。
ottotoさんと場合だとcerta.pem/keya.pemとcertb.pem/keyb.pemをそれぞれ作成しないといけないのではないでしょうか。
(server.crt=certa.pem erver.key=keya.pemと読み替えて下さい)

あと気をつけることは
CA用秘密鍵とサーバ用秘密鍵のパスフレーズは同一使用不可
CA証明書とサーバ証明書のOrganization Nameも同一使用不可
だそうです。

[ メッセージ編集済み 編集者: たて 編集日時 2004-04-30 15:29 ]

[ メッセージ編集済み 編集者: たて 編集日時 2004-04-30 15:34 ]

スキルアップ/キャリアアップ(JOB@IT)