インターネットの安全を支えるOpenSSL

TLSはインターネットを安全に利用する上で欠かすことのできない重要な要素だ。そして、その実装系のひとつであるOpenSSLは多くのサーバ管理者にとって欠かすことのできないソフトウェアとなっている。

ユーザーの多くはOpenSSLについて気にも留めていないか、パワーユーザーであればOpenSSLを暗号系のライブラリまたはフレームワークといった類のもの、という認識を持っているのではないだろうか。Webサーバの管理者であれば、Webサーバをセットアップする最初の段階で証明書の作成に利用するツールという認識を持っているかもしれない。しかし、OpenSSLはそれだけのソフトウェアではない。

OpenSSLは証明書署名要求や自己署名証明書の生成のみならず、ファイルの暗号化や復号化、証明書の検証や証明書有効期限の確認など、さまざまな機能を提供するコマンドでもある。こうしたコマンドを活用することでスクリプトを作成し、管理の手間を削減するといったこともできる。

そこで、Red HatのEnable Sysadminに掲載された記事「6 OpenSSL command options that every sysadmin should know | Enable Sysadmin」をもとに、管理者が知っておきたいOpenSSLコマンドの使い方を紹介しよう。

記事で紹介されている主なOpenSSLコマンドの使い方は次のとおりだ。

証明書の有効性の確認

証明書絡みで多いトラブルのひとつに証明書チェーンの有効性がある。証明書チェーンの有効性は、次のようにopenssl s_clientを実行することで確認できる。-briefオプションはOpenSSLが通常表示する情報の一部を省略して出力する指定で、この指定をやめるとより詳細は表示を得ることができる。

証明書の有効性を確認する方法

echo | openssl s_client -connect ドメイン:443 -brief
  • 実行サンプル

    実行サンプル

上記サンプルでは「Verification: OK」のようになっている点が重要だ。ここが、自己署名証明書では「Verification error: self signed certificate」のような表示になる。

証明書の有効期限の確認

Webサイトの証明書が期限切れになっていて、いつの間にかWebブラウザで表示されなくなっていたという経験をした管理者は多いかもしれない。openssl s_clientとopenssl x509を組み合わせることで、証明書の有効期限を調べることができる。

証明書の有効期限を確認する方法

echo | openssl s_client -connect ドメイン:443 2>/dev/null | openssl x509 -noout -dates
  • 実行サンプル

    実行サンプル

証明書エクステンションの確認

X509エクステンションで追加されるフィールドでよく使われるものにSAN (Subject Alternative Name)がある。複数のFQDNなどを1つの証明書に関連付ける目的などで使われるものだ(SANは単一の値の場合でも使用される)。この値は次のようにして確認することができる。

証明書エクステンションのSANを確認する方法

echo | openssl s_client -connect ドメイン:443 2>/dev/null | openssl x509 -noout -ext subjectAltName
  • 実行サンプル

    実行サンプル

非推奨のTLS暗号やバージョンの確認

サーバによっては、利用が推奨されていない暗号方式や古いバージョンを使っていることがある。Qualys SSL LabなどのWebベースツールを使うことで、TLS構成に関する優れたレポートを得ることができ、安全ではないTLSに関する設定などを知ることが可能だ。OpenSSLコマンドからも、使われているTLSバージョンや暗号スイートをテストすることができる。

既に弱いと評価されているTLSPSKWITHAES128CBCSHAスイートがサポートされているかを調べる方法

openssl s_client -connect ドメイン:443 -cipher 暗号方式 -quiet -no_tls1_3
  • 実行サンプル

    実行サンプル

OpenSSLコマンドを活用しよう

TLSは暗号通信を実現する上で重要なポジションにあり、現在ではWebサーバのみならず主要なサービスで活用されるようになっている。特に無償で入手することができるLet's Encryptが登場してから、証明書の取得と活用が大きく進むことになった。

証明書は一度取得し、サービスの設定が終わると放置されがちだが、状況に応じて更新したり、運用するサービスの設定ファイルを変更したりするなどして、よりセキュリティを適切なものへアップデートしていく必要がある。管理するサーバが数台といった程度であれば手動でもよいが、管理する台数が増えてきたらスクリプトを開発するなど、必要に応じてTLS周りの状況確認を自動化するほうが効率がよく効果的だ。

Red HatのEnable Sysadminに掲載された記事は、こうした場合に使えるOpenSSLコマンドの使い方がわかりやすくまとまっている。目的に応じてこうしたコマンドを利用し、処理を自動化し、定期的に実行して管理状況を確認することなどに応用できる。

OpenSSLは重要性の高いソフトウェアであり、暗号化ライブラリとしてのみならず、暗号処理や証明書関連の操作を行うためのコマンドとしても優秀だ。しかし、OpenSSLをコマンドとして活用することはあまり行われていないように思う。OpenSSLは便利なコマンドであり、使い方次第ではさまざまな業務の自動化を実現できる。まだOpenSSLコマンドを使ったことがなければ、取り上げた記事を参考にするなどして使ってみていただきたい。