昨今では、Let’s Encryptの登場により、正式な証明書をかなり入手しやすくなりました。
その一方で、社内LAN内でのみアクセス可能なテストサーバー、などといったLet’s Encryptで認証を受けるのが難しいサーバーでSSLを使いたい場合や、正式なSSLを発行する前にとりあえずWebサーバーやメールサーバー等のSSL機能が動作しているか確認したい、といった場面もあるかと思います。
その場合、LAN内でのみ通用する独自の認証局を作り、署名して証明書を作成して…としっかりとした方法で構築することもできますが、”とりあえずSSLエラーが出ても問題ないので、とにかくすぐに欲しい”という場合はちょっと面倒です。
一部のLinuxディストリビュージョンでは、そんな場合に備えて”動作チェック用”のssl証明書を一発で発行してくれるスクリプトやコマンドがあります。
例えばUbuntuの場合、
ssl-cert
というパッケージをインストールすることで、”snakeoil”という仮のSSL証明書を一発で生成することができます。
sudo apt install ssl-cert
sudo make-ssl-cert generate-default-snakeoil
上記コマンドで下記のように証明書と秘密鍵が生成されます。
証明書:/etc/ssl/certs/ssl-cert-snakeoil.pem
秘密鍵:/etc/ssl/private/ssl-cert-snakeoil.key
一方CentOSでは”make-ssl-cert”コマンドが存在しないようですが、代わりに
/etc/ssl/
に
make-dummy-cert
というスクリプトが用意されており
cd /etc/ssl/certs
sudo ./make-dummy-cert ファイル名
とすることで、一発で指定されたファイル名で仮の証明書を発行してくれます。
なお、このコマンドで生成されるファイルには SSL証明書と一緒に秘密鍵も入っているので、Webサーバーなどで秘密鍵と証明書を指定するときは、同じファイルをそれぞれに指定すれば動作するかと思います。
ちなみに、nginxを使用してリバースプロキシをする際、nginx側で正式な証明書を設定していれば、nginxと裏側のサーバーとの通信をSSLを行う場合、裏側のサーバーにこの仮のSSLを設定していてもエラーになりません。 (nginxでは基本的に裏側サーバーの証明書のコモンネームと要求されたホスト名が不一致でも警告を行わない)
そのため、実際の運用でもこの仮SSL証明書を裏側のサーバーに対して使用することができます。
ただし、nginxと裏側のサーバーの間をつなぐネットワークが信頼できない場合は、正式なSSLを設定した方がいい場合もあるかと思います。このあたりは使用目的や構築する環境の実態に合わせて選択をしてください。