Linuxで簡単にできるSSLバージョン確認とOpenSSL操作法

目次

はじめに

ブログの記事をどう書けばいいかわからない、記事がうまくまとまらない……という悩みを持っていませんか?本記事は、Linux環境で使えるSSL/TLSの確認方法をわかりやすくまとめた実践ガイドです。主にopensslコマンドを使い、サーバが対応するTLS/SSLのバージョン確認、OpenSSL自体のバージョン調査、そしてSSL証明書の有効期限や詳細の確認方法を順を追って説明します。

なぜ確認が必要か

  • セキュリティ:古いプロトコルや弱い暗号が使われていると通信が危険になります。
  • 運用性:証明書の期限切れはサービス停止の原因になります。
  • トラブル対応:接続できない際の原因切り分けに役立ちます。

対象読者と前提

  • 対象はサーバ管理者や開発者、Linuxに触れたことがある方です。
  • 前提はLinuxでシェル操作ができ、opensslコマンドが使えることです。多くのディストリで標準的に入っています。

本記事の構成(概要)

第2章:Linuxサーバで対応しているTLS/SSLバージョンの確認方法
第3章:OpenSSL自体のバージョン確認方法
第4章:SSL証明書の有効期限や詳細確認
第5章:まとめ:用途別コマンド早見表
第6章:各手法の注意点・ポイント

読み進めれば、実際に手を動かして短時間で確認できるようになります。まずは第2章をお読みください。

Linuxサーバで対応しているTLS/SSLバージョンの確認方法

Linuxではopensslのs_clientコマンドで、対象サーバがどのTLS/SSLバージョンに対応しているか簡単に確認できます。以下に実例と読み取り方をまとめます。

基本的なコマンド例

  • TLS1.2で確認:
    openssl s_client -connect example.com:443 -tls1_2 -servername example.com
  • TLS1.3で確認:
    openssl s_client -connect example.com:443 -tls1_3 -servername example.com
  • 古いバージョン(非推奨)の確認:-tls1、-tls1_1、-ssl3(サーバが無効化していることが多い)

-servernameオプションはSNI対応の仮想ホストで正しい証明書を得るために必要です。ポート指定は通常443です。

出力の見方(接続成功時)

  • 先頭にCONNECTEDと表示され、証明書チェーン(Certificate chain)が出ます。
  • “Cipher is …”で選ばれた暗号スイートが分かります。
  • 最後に”Verify return code: 0 (ok)”があれば問題ありません。

接続失敗の例と対処

  • バージョン非対応なら”handshake failure”や”no protocols available”と出ます。そのバージョンはサーバで無効化されています。
  • タイムアウトや名前解決エラーならネットワーク設定やホスト名を確認してください。

ブラウザでの簡単確認(Chrome)

  1. 対象サイトを開き、F12でデベロッパーツールを表示します。
  2. Securityタブを選択すると、接続で使われたTLSバージョンや暗号化方式が表示されます。

これらを使えば、サーバがどのTLS/SSLバージョンで通信可能かを手早く確認できます。

OpenSSL自体のバージョン確認方法

概要

インストールされているOpenSSLのバージョンは、端末で簡単に確認できます。まずはopensslコマンドを使う方法を紹介します。

基本コマンド

  • openssl version
  • シンプルにバージョン文字列を表示します。例: OpenSSL 1.1.1 11 Sep 2018
  • openssl version -a
  • ビルド日、プラットフォーム、コンパイルオプションなど詳細情報を表示します。ライブラリのビルド状況を確認したいときに便利です。

ディストリビューション別の確認例

  • Ubuntu/Debian系: 端末で “openssl version” を実行するか、パッケージ情報は “apt show openssl” で確認できます。
  • CentOS/RHEL系: “rpm -q openssl” でパッケージのバージョンを確認します。
  • macOS(Homebrew): “brew info openssl” でインストール情報を取得します。

出力の見方と注意点

opensslコマンドは利用中の実行ファイルの情報を返します。アプリケーションが別のOpenSSLをバンドルしている場合、システムのopensslとバージョンが異なることがあります。アプリ側のライブラリを確認したいときは、そのアプリの実行ファイルやパッケージ情報を確認してください。

例: 実際の確認手順

  1. ターミナルを開く
  2. “openssl version -a” を実行
  3. 出力の最初の行で主要バージョンを、その他の行でビルド情報を確認します。

必要であれば、実際の出力例やよくあるトラブル対処法も説明します。ご希望があれば教えてください。

SSL証明書の有効期限や詳細確認

概要

opensslコマンドで、リモートやローカルの証明書の有効期限や発行者・サブジェクトなどを簡単に確認できます。ここでは実用的なコマンド例と見方を説明します。

リモートサーバの確認(例)

  • 有効期限だけ取得:
    echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
    -> notBefore(発行日)と notAfter(有効期限)を表示します。
  • 詳細情報を取得:
    echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -subject -issuer -serial -fingerprint -text
    -> サブジェクト(CNやSAN)、発行者、シリアルや指紋を確認できます。
  • 証明書チェーンを確認したいときは -showcerts を使います。

ローカルファイルの確認

  • PEM形式の証明書:
    openssl x509 -in cert.pem -noout -dates -subject -issuer -text
    -> ファイルの有効期限や拡張(SANなど)を表示します。

curlでの簡易チェック

  • OCSPステータス要求や簡易確認:
    curl -v –insecure –cert-status https://example.com 2>&1 | grep -i ocsp
    -> サーバがOCSPステープリングを返すか簡易確認できます。ブラウザ互換の簡単チェックに便利です。

見方と注意点

  • notAfterが有効期限です。期限切れはサービス停止につながります。証明書のチェーンとSAN(別名)も合わせて確認してください。

まとめ:用途別コマンド早見表

以下は代表的な用途ごとのコマンド一覧と、実行時の短い説明です。例はport 443を想定しています。

  • TLSバージョン確認(特定バージョン)

  • コマンド: openssl s_client -tls1_2 -connect サーバ:443

  • 説明: サーバがTLS1.2でハンドシェイクできるか確認します。SNIが必要な場合は-servername ホスト名を追加します。

  • OpenSSL本体のバージョン確認

  • コマンド: openssl version

  • 説明: 使用中のOpenSSLのバージョンを表示します。

  • 証明書の有効期限(openssl経由)

  • コマンド: echo | openssl s_client -connect サーバ:443 -servername ホスト名 2>/dev/null | openssl x509 -noout -dates

  • 説明: 端末に表示されるNotBefore/NotAfterで有効期間を確認します。

  • 証明書の有効期限(curl経由、簡易)

  • コマンド: curl --insecure --verbose https://ホスト 2>&1 | grep "expire date"

  • 説明: curlの接続ログから期限を抜き出します。--insecureを使うと検証をスキップします。

  • 証明書詳細の確認

  • コマンド: openssl s_client -connect サーバ:443 -servername ホスト名 2>/dev/null | openssl x509 -noout -text

  • 説明: 証明書の発行者や拡張キー用途など詳細を確認できます。

ちょっとした注意点:
– SNIが必要なサービスでは-servernameを忘れないでください。
– コマンドは実行する環境のネットワーク制約に注意してください。

各手法の注意点・ポイント

以下では、実際にコマンドや手法を使う際の注意点と運用上のポイントを分かりやすく解説します。

1) OpenSSLのバージョンとTLS対応

  • 古いOpenSSLはTLS1.3に対応しない場合があります。例えばOpenSSL 1.0系はTLS1.3非対応です。アップデートはパッケージ管理で行い、事前にステージングで動作確認してください。

2) サーバ側のサポート不足

  • サーバが特定のTLSバージョンや暗号スイートをサポートしていないと接続でエラーになります。サーバ設定(nginx/apache等)と合わせて確認してください。

3) curlや環境依存の差

  • curlはビルド時に使われたTLSライブラリ(OpenSSL, NSS, libressl等)に依存します。別の環境で結果が異なることがあるので、必ず実際の運用環境で確認してください。

4) 証明書確認の落とし穴

  • openssl s_client や curl で検証する際、SNIが必要な場合は -servername を指定してください。例:
openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
  • プロキシやファイアウォールで接続が遮断されることがあります。ローカルでは成功しても本番では失敗する場合があります。

5) 自動化と運用の注意

  • 証明書の有効期限は自動監視と通知を必ず導入してください。Let’s Encrypt等を使う場合は自動更新の仕組みをテストしておきます。
  • 脆弱性対応のため、OpenSSLやサーバソフトの定期的なアップデートスケジュールを設け、更新前にロールバック手順を準備してください。

6) テストと権限

  • コマンド実行にはネットワーク権限が必要です。CIや管理サーバで実行する場合、実行権限と鍵管理に注意してください。

各手法は目的と環境に合わせて使い分けると安全に運用できます。問題があれば、まずステージング環境で再現してから本番へ反映してください。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次