SSLアクセラレータを1台作っておけば、バックエンドのwebサーバが何台あっても
証明書はアクセラレータにだけ入れておけばいいんでね?という
安易な発想で作ってしまった。
もっとも、ベリサインとかグローバルサインなどの証明書発行機関では
規約上、アクセラレータの後ろに複数のwebサーバがあるんだったら、台数分のライセンス買えといっているので
証明書代の節約はあんまり期待できない (´・ω・`)
一応、ボリュームライセンスはあるっちゃーあるが。
でも、せっかくなので、アクセラレータ1台とwebサーバ1台を作ってみた。
ここを参考に作ってみた。
■■ 検証環境について
アクセラレータ
ホスト名:vh110
IPアドレス:192.168.0.110
webサーバ
ホスト名:vh120
バーチャルホスト:www.example.tld
IPアドレス:192.168.0.120
■ vh110にsquidをインストールする
[root@vh110 ~]# yum install squid
■ 設定
[root@vh110 ~]# cd /etc/squid/
[root@vh110 squid]# chmod +r squid.conf
[root@vh110 squid]# vi squid.conf
# TAG: http_port
の箇所で、
ここを
# http_port 3128
こうする
# http_port 3128
http_port 80
# TAG: https_port
の箇所で、
ここを
#Default:
# none
こうする
#Default:
# none
https_port 443 cert=/etc/squid/ssl/newcert.pem key=/etc/squid/ssl/private.key
ここを
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports
こうする
# Only allow cachemgr access from localhost
http_access allow all
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports
# TAG: visible_hostname
の箇所で、
ここを
#Default:
# none
こうする
#Default:
# none
visible_hostname www.example.tld
# TAG: httpd_accel_host
# TAG: httpd_accel_port
の箇所で、
ここを
#Default:
# httpd_accel_port 80
こうする
#Default:
# httpd_accel_port 80
httpd_accel_host virtual
httpd_accel_port 80
# TAG: httpd_accel_uses_host_header on|off
の箇所で、
ここを
#Default:
# httpd_accel_uses_host_header off
こうする
#Default:
# httpd_accel_uses_host_header off
httpd_accel_uses_host_header on
以上を編集して保存。
■■ 秘密鍵と証明書の作成
■ ディレクトリの作成
[root@vh110 squid]# mkdir ssl
[root@vh110 squid]# cd ssl/
[root@vh110 ssl]# pwd
/etc/squid/ssl
■ 秘密鍵の作成
[root@vh110 ssl]# openssl genrsa -des3 -out private.key 1024
■ 秘密鍵の確認
[root@vh110 ssl]# openssl rsa -text -noout -in private.key
Enter pass phrase for private.key:
Private-Key: (1024 bit)
■ CSRの生成
[root@vh110 ssl]# openssl req -new -key private.key -out csr.pem
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Hokkaido
Locality Name (eg, city) [Newbury]:Sapporo
Organization Name (eg, company) [My Company Ltd]:nullpopopo
Organizational Unit Name (eg, section) []:nullpopopo
Common Name (eg, your name or your server's hostname) []:www.example.tld
あとは空エンター
■ CSRの確認
[root@vh110 ssl]# openssl req -text -noout -in csr.pem
Subject: C=JP, ST=Hokkaido, L=Sapporo, O=nullpopopo, OU=nullpopopo, CN=www.example.tld
■ 秘密鍵のパスフレーズ解除
[root@vh110 ssl]# cp -p private.key private.key.passphrased
[root@vh110 ssl]# openssl rsa -in private.key -out private.key
Enter pass phrase for private.key:
writing RSA key
■ 秘密鍵からパスフレーズが抜けたことを確認する
[root@vh110 ssl]# openssl rsa -text -noout -in private.key
■ 証明書の作成
[root@vh110 ssl]# openssl x509 -in csr.pem -out newcert.pem -req -signkey private.key -days 365
Signature ok
subject=/C=JP/ST=Hokkaido/L=Sapporo/O=nullpopopo/OU=nullpopopo/CN=www.example.tld
Getting Private key
■ 証明書の確認
[root@vh110 ssl]# openssl x509 -text -noout -in newcert.pem
Issuer: C=JP, ST=Hokkaido, L=Sapporo, O=nullpopopo, OU=nullpopopo, CN=www.example.tld
Validity
Not Before: Oct 30 14:37:00 2007 GMT
Not After : Oct 29 14:37:00 2008 GMT
Subject: C=JP, ST=Hokkaido, L=Sapporo, O=nullpopopo, OU=nullpopopo, CN=www.example.tld
■■ squidを起動する
■ 起動
[root@vh110 ~]# /etc/init.d/squid start
squid を起動中: . [ OK ]
■ 自動起動設定
[root@vh110 ~]# chkconfig squid --list
squid 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@vh110 ~]# chkconfig squid on
[root@vh110 ~]# chkconfig squid --list
squid 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■■ vh120にapacheをインストールする
いつものようにインストール。
www.example.tld のバーチャルホストを作成しておく。
■■ 接続試験
クライアントのhostsに
192.168.0.110 www.example.tld
と書いておくか、DNSサーバでAレコードを指定する。
vh110のhostsには
192.168.0.120 www.example.tld
と書いておく
クライアントPCから
http://www.example.tld/
https://www.example.tld/
にアクセスして、vh120のログを注視する。
ログにはvh110からアクセスがあればOK。
■■ わかったこと、疑問点
とりあえず、単一のホストでのアクセラレータはできた。
で、どうやったらIPベースのバーチャルホストができるのか?
http://iret-onsoku.blogspot.com/2007/10/squidapache.html
をヒントにできそうだ。
要は
vh110(アクセラレータ側)に、追加NICなりaliasなり設定する
http_port 80
を
http_port 192.168.0.110:80 とか~111:80にして
https_port 443 cert=/etc/squid/ssl/newcert.pem key=/etc/squid/ssl/private.key
を
https_port IP_addr:443 cert=/etc/squid/ssl/newcert.pem key=/etc/squid/ssl/private.key
https_port IP_addr2:443 cert=/etc/squid/ssl/newcert2.pem key=/etc/squid/ssl/private2.key
とかにすればよいと思う
けど眠いから明日にしよう。。。