1 はじめに
最近では、Webサイトの一部をHTTPS化するのではなく、Webサイト全体をHTTPS化する「常時SSL化」が行われています。
従来では、個人情報を入力するページのみをHTTPS化して情報を保護することが一般的でしたが、セキュリティの向上を目指してWebサイト全体がHTTPS化されるようになって来ています。
2 SSL化のメリット
WebサイトをSSL化することによって、次のメリットがあります。
- 通信の暗号化によるセキュリティ向上
- Webサイトの実在性の証明
- HTTP/2による高速化の可能性
SSL化されることで、ブラウザー、サーバー間の通信が暗号化されて安全な通信経路を確保することができます。そのため悪意の第三者による盗聴を防ぐことができます。
ところが、もう一つの重要な特徴として「Webサイトの実在性の証明」があります。これはドメインの所有者の実在性を証明するもので、X.509という標準に基づいています。
3 X.509 証明書
X.509は、ITU(国際電気通信連合: International Telecommunication Union)により定められた証明書のフィールドの勧告で識別名(DN:Distinguished Name)によりドメインの所有者の実在性が証明されています。このX.509に基づいてRFC-3280が提案されています。
証明書に含まれるDNの要素には、次のようなものがあります。
C(Country) 国名
O(Organization) 組織名
OU(Organization Unit) 部門名
CN(Common Name) 一般名
4 PKI認証
さらに重要なこととして、この証明書はPKIの仕組みに基づいています。つまり証明書は、CA(認証局)によって発行されます。CAが信頼できる第三者として、証明書の正しさを証明しています。ブラウザーからWebサイトを閲覧する際には、HTTPSでSSLを使うサイトであれば、あらかじめブラウザーの内部に登録されている「ルート証明書」から、ルート証明書の証明する「CA証明書」経由で、「サーバー証明書」の正しさを証明しています。
つまり、自己署名証明書の場合には、「ルート署名書」から「CA証明書」を経由して正しさが証明されていないために、警告が表示されてしまいます。
5 サーバー署名書の種類
ここで、証明書には認証方法によってDV、OV、EVの3種類があります。
- DV証明書(Domain Validation:ドメイン認証)
申請者が、証明書に記載されているドメインを所有していることのみを確認して証明します。組織の確認や、認証局からの電話を受けることなく証明書が発行されます。個人による申請も可能です。
- OV証明書(Organization Validation:組織の実在性確認)
組織情報の審査を受けてから発行される証明書です。証明書の属性に組織情報が設定されて、なりすましを防止することが可能です。
- EV証明書(Extended Validation:組織の実在性を厳格に確認)
OV証明書より厳格な審査を経てから発行されます。ブラウザでは、アドレス欄の鍵のマークが「緑色」になり組織名も表示されます。多くの金融機関などで使われています。
注:DV証明書、OV証明書でも鍵は「緑色」になりますが、組織名は表示されません。また、ここで、「緑色」と書きましたが使用するブラウザーに依存しています。
6 自己署名証明書の危険性
ここまで見てきましたように、「自己署名証明書」を使用した場合には一応通信を暗号化することはできますが、サイトの実在性を証明することができなくて警告が表示されてしまいます。
例えば、社内あるいは自宅のサーバーであるから警告を無視するように操作していた場合、なんらかの際にサイトが偽装されていた場合にも警告を無視してしまう可能性があります。
そのような操作をして、個人情報を入力してしまった場合には、個人情報を盗み取られたりする可能性があります。
少なくとも、サーバー証明書の警告を習慣的に無視し続けることには危険性が存在しています。
やはり、無償の場合であればLet’s Encryptを使用するなどして、警告の表示されない正しい証明書を使用していくべきでしょう。
7 自己署名証明書の作成
以上の内容を理解した前提で、一応の手順としての自己署名証明書の作り方は以下となります。
7.1 秘密鍵の作成
サーバー用の秘密鍵を作成します。ここでは RSA 2048ビットとしています。
$ openssl genrsa 2048 >server.key
秘密鍵の内容は、以下で確認することができます。
$ openssl rsa -noout -text -in server.key
7.2 証明書署名要求の作成
秘密鍵を元に作成した証明書の署名要求を作成します。
$ openssl req -new -key server.key -out server.csr
ここで、DNの入力が要求されます。自己署名証明書では、組織の実在性を証明することはできませんからすべて既定値でも構いません。通常の証明書であれば、Common NameとしてサーバーのFQDNが与えられてWebサイトの実在性が証明されます。
証明書署名要求の内容は、以下で確認することができます。
$ openssl req -text -in server.csr
7.3 自己署名証明書の作成
自分の秘密鍵で署名した証明書を作成します。
$ openssl x509 -days 3650 -req -signkey server.key -in server.csr -out server.crt
証明書の内容は、以下で確認することができます。
$ openssl x509 -text -in server.crt
8 ApacheのSSL化
例としてApacheの設定ファイルに証明書の設定を登録してdefaultのSSLサイトを有効化してみます。
$ cd /etc/apache2/sites-available
$ sudo vi default-ssl.conf
SSLCertificateFile /etc/apache2/server.crt
SSLCertificateKeyFile /etc/apache2/server.key
$ sudo a2enmod ssl
$ sudo a2ensite default-ssl
Apacheを再起動すればhttpsでのアクセスが可能になります。
9 Raspberry Piの場合
Raspberry PiにインストールされているChromiumで上記のサイトを閲覧した場合、以下のように警告が表示されています。
ここで、「Advanced」をクリックすると次の画面になります。
ここで、「Proceed to localhost (unsafe)」をクリックして証明書を信頼させれば一応SSL接続で閲覧できるようにはなります。