SSL/TLS証明書とは|種類・仕組み・導入・運用の完全ガイド

SSL証明書とは — 基本の理解

「SSL証明書」とは本来は古い呼称で、現在の標準プロトコルはTLS(Transport Layer Security)ですが、一般には「SSL証明書」という言葉が広く使われています。TLSはウェブ通信を暗号化し、通信相手の正当性(サーバーが主張するドメインを本当に管理しているか)を検証するために公開鍵基盤(PKI: Public Key Infrastructure)を利用します。証明書はそのPKIの中で、公開鍵とドメイン/組織情報を紐付け、信頼できる認証局(CA: Certificate Authority)が署名した電子文書です。

証明書が果たす3つの役割

  • 暗号化:クライアントとサーバー間の通信を暗号化して盗聴を防ぐ(対称鍵はハンドシェイクで安全に共有)。
  • 認証:接続先が本当にそのドメインを所有するサーバーかどうかを確認する。
  • 整合性:通信内容が第三者に改ざんされていないことを保証する。

証明書の種類(用途・検証レベル)

  • DV(Domain Validation):ドメインの所有権のみを確認。発行が自動化されやすく、無料の発行サービス(例:Let's Encrypt)で主に利用。
  • OV(Organization Validation):ドメインに加えて組織の実在性を審査して発行。会社名等が証明書に含まれる。
  • EV(Extended Validation):より厳格な審査を経た証明書。過去はブラウザに特別な表示をしたが、近年UIは変化しており、必ずしも目立つ表示にはならない。
  • ワイルドカード:一階層のサブドメイン(*.example.com)をまとめてカバー。
  • SAN/マルチドメイン:Subject Alternative Nameに複数ドメインを列挙して一枚で複数ホストを保護。
  • 自己署名:自分で署名した証明書。テスト用途には便利だが、公開サイトではブラウザ警告が出る。

証明書の仕組み(発行〜利用の流れ)

  • サーバー側で秘密鍵と公開鍵のペアを生成し、CSR(Certificate Signing Request)を作成する。
  • CSRをCAに送信し、ドメイン所有権や組織情報の確認(検証)が行われる。
  • CAは証明書に署名し、サーバーへ発行する。証明書チェーン(ルート→中間→サーバー)が形成される。
  • クライアントが接続するとTLSハンドシェイクで証明書を提示。クライアントはチェーンを辿りルートCAまで信頼を確認(OS・ブラウザのルートストアに登録されたCAかどうか)。
  • ハンドシェイクで公開鍵暗号を利用して一時的なセッション鍵(対称鍵)を安全に共有し、その後の通信は高速な対称暗号で行われる。

技術的留意点とベストプラクティス

  • TLSバージョン:古いSSLv2/SSLv3、TLS 1.0/1.1は脆弱で無効化推奨。TLS 1.2以上(可能ならTLS 1.3)を採用する。
  • 鍵と署名アルゴリズム:RSAは最低2048ビット、現代的にはECC(例:P-256)を推奨。署名はSHA-2系(SHA-256等)を使用。
  • 前方秘匿性(PFS):ECDHEなどの一時的(エフェメラル)鍵交換を使い、将来秘密鍵が漏洩しても過去通信を解読されないようにする。
  • 中間証明書の提供:サーバーは中間CA証明書を正しく送る必要がある。これが欠けると一部クライアントで「信頼されない」表示になる。
  • OCSP/CRLと失効:失効リスト(CRL)やオンライン証明書状態プロトコル(OCSP)で失効確認。OCSPレスポンスをサーバーが「ステープル」する(OCSP Stapling)ことで遅延とプライバシー問題を軽減できる。
  • 有効期限:公的に信頼されるTLS証明書の最大有効期間は業界基準により短縮されており、現在は約398日(約13か月)が上限。Let's Encryptは90日。
  • 証明書の形式:PEM(.crt/.pem)、DER(.der)、PKCS#12(.pfx/.p12)など。サーバーソフトに合わせて変換と配置が必要。

運用上の注意点とよくあるトラブル

  • 間違ったドメイン名(CNやSANと一致しない)でエラーになる。
  • 中間証明書をサーバーに設定していないとチェーンが切れて警告される。
  • 証明書の有効期限切れ:自動更新(ACMEやスクリプト)を導入して防ぐ。
  • 「混在コンテンツ」(HTTPリソースをHTTPSページで読み込む)によりブラウザがブロックすることがある。
  • サーバー時刻がずれていると証明書が有効と判断されない(NTPで時刻同期を保つ)。

セキュリティ向上のための追加設定

  • HSTS(HTTP Strict Transport Security):ブラウザに対して常にHTTPSを使うよう指示。初期設定は慎重に(永続化の副作用がある)。
  • OCSP StaplingとMust-Staple:OCSP Staplingを有効にしてレスポンスを添付し、必要に応じてMust-Staple拡張で必須化する。
  • Cipher Suiteの適切な選定:弱い暗号(RC4、3DES等)や古いハンドシェイクを無効化する。
  • Certificate Transparency:公開証明書はCTログへ登録されることで不正発行の検出が容易になる。多くのブラウザでCTログに掲載されたSCTが要求される。

実用的な導入手順(簡略)

  1. サーバーで秘密鍵とCSRを生成(opensslなど)。
  2. CAにCSRを送信し、必要な検証を受ける(ドメイン認証/組織認証)。
  3. CAから証明書(と中間証明書)を受領し、サーバーにインストール。
  4. ウェブサーバー(nginx/Apache等)を設定してTLSプロトコル・Cipherを調整し、再起動。
  5. 外部ツール(例:Qualys SSL Labs)で設定と安全性を検査。HTTP→HTTPSリダイレクトやHSTSを追加で設定。

自動化と無料化の潮流

近年、Let's EncryptとACMEプロトコル(RFC 8555)によって証明書の取得・更新は大幅に自動化され、無料で利用可能になりました。これによりウェブ全体のHTTPS化が急速に進展しています。ただし、組織の実在性が必要な場合はOV/EVを提供するCAを選ぶ必要があります。

まとめ — なぜSSL/TLS証明書が重要か

SSL(正確にはTLS)証明書は、ウェブサイトの通信を安全にし、利用者に対して信頼性を示すための基盤です。正しい設定・運用(最新のTLS採用、前方秘匿性、適切な証明書チェーン管理、自動更新、セキュリティヘッダーなど)を行うことで、盗聴・改ざん・なりすましなどのリスクを大幅に低減できます。運用の自動化と外部検査を組み合わせることで安全な公開環境を維持しましょう。

参考文献