VPSでSSLを導入する時に知っておくこと
こんにちは!ぷれつくの監修を担当しているNSです。
今回は、VPSサーバーにSSLを導入する場合、事前に知っておくべきことを説明致します。
SSLは1IPに対してひとつだけ(SNIを利用すると複数ドメイン対応になります)
VPSにPleskを導入して複数ドメインを管理していた場合、例えば複数ドメインでECサイトを運営するならば、その複数ドメインごとにSSLを設定しなくてはなりません。
しかし、SSLは1IPアドレスに対して、ひとつしか導入することができません。なので、SSL暗号化認証を導入しよう にも書いたように、複数のドメインに導入しなくてはならない時は、マルチドメインタイプを導入する必要があります。大体1ドメイン1万円前後かかるので、IPを買う方が安いのか証明書を買う方が安いのか都度検討しないといけません。
GMOのVPSプランの場合、IPの追加というオプションがありませんので、複数ドメインに対して証明書が必要な場合は、マルチドメインタイプを申し込む必要があります。次に、サブドメインに対してですが、SSL証明書はホスト名を含むので複数のサブドメインに対応していません。なので、サブドメインにも導入したい場合にはワイルドカードドメイン用の証明書を買わなきゃなりません。
【追記】Plesk12からSNIという新技術を使って、1IP=複数ドメインのSSLが対応となりました。
Pleskを使って1サーバー(同一IP)に複数ドメインのSSLを設定する方法(SNI)|Plesk入門・サーバー運用サイトぷれつく
[追記2]
ワンクリックで導入可能!無料SSL「Let's Encrypt SSL」が使えるようになったぞ!|Plesk入門・サーバー運用サイトぷれつく
どうして、SSLは1IPに対してひとつだけなのだろうか?
SSL証明書ってどういう通信しているかを説明しますね。
TCP/IPの通信の仕組みを知っていますか?簡単にいえばインターネット通信のほとんどがTCPです。その他にUDPというのがあります。UDPとTCPの違いって何かというと、相互間通信か一方通行の違いなんです。
TCP → 相互間通信
UDP → 相互間通信
UDPは、パケットを送りっぱなしで、相手が生きてるか死んでるかの確認はしません。
DNSって、たとえば、「pakutaso.com」は、どのようなIPアドレスなの?っということを問い合わせる機能と、「pakutaso.com」って、このIPアドレスですよ!と答える機能の2つを持っているわけですね。
Whois pakutaso.com - Domain records lookup
その両方の機能の際に、一方的に問い合わせることと、一方的に回答を送りつけるのことを指します。
なので、ドメインに2つ以上DNSを立てるのか、windowsのDNS入力欄がなぜ2つあるのかの答えがこれなんですね。
要するに、TCPと違って応答の確認もできないので、ある一定期間の返答がなかったら2つ目に問い合わせる事がDNSの一般的な挙動です。逆に言えばTCPというのは、通信を確立する前に、ノックするんですね。「いきてますか?」って、「はいはい。生きてます」って返答が来ないと、次の本命の通信をしないのがTCPですね。
ふまえて、TCP通信の話を説明します。TCP通信でホームページの閲覧がなされていますが、TCP通信というのは要はインターネット上の通信規格のほとんどを指すわけで、メールも、FTPも、httpも、httpsもTCP通信です。しかし、どれがFTPでどれがメールか、受け取るサーバーはどうやって判断しているのかわかりません。その区別をするのがポート番号になります。
Q:http のポート番号は何番か知っていますか? 80 番がデフォルトです。
Q:それでは、https のポート番号は何番か知っていますか? 443 番がデフォルトです。
http通信は80番で、同じサーバー、同じIPに、hogehoge.com と、aiueo.com の二つがあった場合どうなるのでしょう。ApacheならApache、nginxで80番設定しているのなら、どのドメインでも80番ポートです。なのでどれもこれもhttp通信はひとつのポートになります。
SSL通信は基本的に暗号化するだけのことでhttpと変わりません。ベースは443番ですので443番で通信すればOKなわけで、なぜSSL証明書は1IPアドレスに対して、ひとつなのかというと、証明書というのは、「このドメインは、ちゃんとしたドメインですという証明を第三者機関が証明してくれる資料」のようなもので、1つのIPアドレスに1つのドメインの証明書をつけたら、443番を通過するSSL通信の証明書はどのドメインでも1つのドメインの証明書になります。以上のことから、マルチドメイン対応のSSL以外で証明書を発行することは仕様上無理なのです。
「hogehoge.com」 の証明書をつけてあって「aiueo.com」 でSSL通信をすると使われる証明書は「hogehoge.com」ですから、不一致ということでエラーになります。要するに付けることはできても、どれか一つしか採用できないのです。これが、SSL証明書の仕組みとなります。
ちなみに、1つのIPアドレスで複数の証明書を持つにはドメインごとにSSL通信ポートを変えるという裏技があります。
・hogehoge.com:4443
・aiueo.com:5543
お尻の:を嫌がる人が多いので、デフォルトの443で行いたい場合、複数IPアドレス(サーバーを複数契約するか)を取得するか、マルチドメインタイプの証明書を契約するかになるわけです。ちなみに、マルチドメインタイプの証明書ですが、証明書自体がワイルドカードドメインになっていて、1つの証明書に複数のドメインを持たせることができるようになっています。ホスティング事業をやるなら、私はSSL証明書標準装備のホスティングなら今からでも結構集めることができるんじゃないかと思っています。金額が高いのでアレですけどね。
ということで、1IPアドレスに対して、1SSL証明書というのは、技術的に不可能なわけではなく、通信規格上、現在のドメインの仕組み上、1つしか設置できない論理であるということで、技術的不可能というわけじゃないっていうことですね。
ちなみに、証明書は設置しなくてもSSL通信は可能です。ただし、設置しない=ブラウザで危険です的なエラーを出る → なんだこれ!?というだけのことです。
社内向けの管理システムなんかは証明書入れずに運用するとか、やすい証明書でエラーだけ回避できればいいとやることが多いですね。