【セキュリティ】認証局と証明書に関する学習記録

2024年1月29日

こんにちは、キクです。

本記事は、僕が自己学習で学んだことをブログでアウトプットするシリーズになります。
今回は『認証局と証明書』について書いていこうと思います。

それでは、よろしくお願いします。

注意事項

本記事は自己学習としてのアウトプットが目的となります。

そのため、本記事には誤った情報が含まれる可能性もありますが、ご了承ください。

認証局について

現実世界では、自身を証明するための書類として「運転免許証」などを利用したりする
これは、運転免許証が信頼できる公的な第三者機関(都道府県公安委員会)が発行したものであり、信頼に値する証明書になるからである

一方で、このような場面で「会社の名刺」を出しても身分を証明力するための効果はない
会社の名刺などは最悪自分でも作れてしまうものなので、信頼性に乏しいからである

デジタルの世界でも同じことが言える

この「デジタル世界における公的な第三者機関」とも言えるのが認証局と呼ばれる組織であり、「CA(Certification Authority)」と表記されることも多い

多くの場合は、認証局に依頼して「公開鍵証明書」を作成してもらうことになる
また、自作名刺のように自分で作った証明書は「オレオレ証明書」と呼ばれる

認証局の役割

認証局には次のような役割がある

1. 電子証明書の発行

申請者を認証し、電子証明書を発行・配布する

2. 電子証明書の失効

有効期限切れや、セキュリティ上の問題があるなど所有者からの申請に応じて失効手続きを進める
失効された証明書は証明書失効リスト(CRL)に登録される

3. リポジトリ

管理リポジトリは、以下のような情報を格納し、公開しているデータベースのこと

  • 証明書発行リスト
  • 証明書失効リスト

認証局の構成

前項で「リポジトリ」という言葉が出できたが、認証局は次のような構成要素となっている

1. 登録局

電子証明書の申請者が提出した所有者情報を審査する機関

2. 発行局

登録局からの要求に基づいて実際に証明書の発行や失効を行う機関

3. リポジトリ

認証局に関する情報や電子証明書の有効性に関する情報を提供

認証局の種類①(パブリック認証局 / プライベート認証局)

1. パブリック認証局

公に対して正当性を証明する認証局

2. プライベート認証局

「社内利用」など一部端末で限定的に証明する認証局自分で認証局を作ることも可能(オレオレ認証局)

認証局の種類②(ルート認証局 / 中間認証局)

他者を証明する認証局だが、認証局自体を保証するための制度も必要

以下2パターンの認証局が存在する

1. ルート認証局

自分の正当性を自ら証明できる認証局ルート認証局自身の信頼性は、次のような項目をクリアすることで証明される

  • 外部機関による厳しい監査の通過
  • 認証業務運用規程(CPS)を公開すること
  • 運用実績や知名度など

2. 中間認証局

ルート認証局や上位の中間認証局によってデジタル証明書を発行してもらうことで、自らの正当性を証明する

証明書について

公開鍵証明書の種類

大きく分けて以下3つがあるが、実際の業務においては公開鍵証明書を「サーバ証明書」として利用するケースが多い

1. サーバ証明書

HTTPS(SSL/TLS)を使った暗号化通信が可能になる

また、接続先のサーバが「なりすまし」でないことの証明にもなる
サーバ証明書に登録されたCN(Common Name)を確認することが判断材料のひとつとなる

2. クライアント証明書

Webサーバなどに接続する「クライアント側」に導入する証明書
接続元を「特定PCのみに絞りたい」などのケースで有効

3. ルート証明書

ルート認証局が自らを証明するために発行した証明書

【事例】Wikipediaのサーバ証明書

WikipediaのURLは「https://ja.wikipedia.org」であるが、サーバ証明書のCN(コモンネーム)を確認すると「*.wikipedia.orgワイルドカード証明書)」となっており一致していることが分かる

このように一致していれば「接続先サイトはなりすましではない」という判断ができる

サーバ証明書ができる流れ

通常、サーバ証明書は申請者側で必要な情報を揃えた後、「認証局」によって作成される

  1. 申請者側でCSRの生成
  2. CSRを認証局に提出
  3. 認証局でCSRの情報を元にサーバ証明書を作成

CSR(Certificate Signing Request)

申請者(サーバA)の情報と公開鍵の情報が含まれている

CSRを認証局に提出することは、以下を依頼することと同義

「私はこういうものです」
「私と公開鍵の結び付きを保証してください( = 署名してくださいという依頼)」

CSRには以下のような項目が含まれる

項目名説明
Common NameSSL暗号通信を行うサイトのURL(FQDN)で指定
OrganizationOrganizationサイトを運営する組織名
Organizational Unit部門部署
Locality市町村名
State or Province都道府県
Country

サーバ証明書の種類

サーバ証明書には、以下3種類が存在する

種別 呼び方 信頼度 保証内容 補足
DV証明書 ドメイン認証型
  • HTTPS通信に利用できる
  • 証明書の保有者がドメインを持っていること
  • ドメインが一致していることのみを保証してくれる
  • サイト運営者の実在性は保証しないため、フィッシングサイトである可能性もあり
OV証明書 組織認証型
企業認証型
  • DV証明書で保証している内容
  • 証明書の保有者の実在性
  • ドメインの認証に加えて「実在性(その組織が存在する)」までを保証してくれる
  • フィッシングサイトの場合はこの段階で落ちる
  • OV証明書の場合は、CNにワイルドカードを使うことができるのも特徴
EV証明書 EV認証型
  • OV証明書で保証している内容
  • 証明書の保有者の実務実態
  • ドメイン、実在性に加えて「業務実態」についても保証してくれる
  • URL横の「鍵マーク」にアイコンを合わせると「発行先」という情報が表示されたり、アドレスバーが緑色に表示されたりする
※「V」は「Validation(検証)」という意味

電子証明書の有効期限

多くは1~3年程度

この期間は主に以下の要件を考慮してのこと

  1. 法律(電子署名法施行規則6条4項)的に「電子証明書の有効期限は5年を越えないもの」と定められている
  2. 技術進歩の早さから、あまり長いと暗号化アルゴリズムが解読される恐れがあり危険

証明書チェーン

クライアントやサーバなどの証明書から、ルート認証局の認証署名書までの連なりのことを指す

ブラウザでサイトAに接続した際に、ブラウザはサイトAのサーバ証明書の正当性を確認する
このとき「正当性確認」に利用されるのが証明書チェーン

証明書チェーンの例

リーフ証明書(いわゆるサーバ証明書)---> 中間証明書 ---> ルート証明書

  • リーフ証明書:末端のサーバ証明書(公開鍵証明書)を中間認証局の秘密鍵を用いて署名する
  • 中間証明書:中間認証局の公開鍵証明書を最上位の認証局(ルートCA)の秘密鍵を用いて署名する
  • ルート証明書:ルートCAの公開鍵証明書はルートCA自身の秘密鍵を用いて自己署名する

関連調査メモ

関連キーワード

PKI(Public Key Infrastructure)

公開鍵基盤

中間認証局を保証する上位の認証局を保証する・・・という「信用の連鎖により安全に公開鍵暗号を運用する社会的な基盤」のこと

ワイルドカード証明書

Common Nameは基本的に「FQDN」での指定が必要
しかし、たくさんのサーバ郡でサーバ証明書が必要な場合には申請や管理の面でも大変になる

このような場合には、各サーバで共通して利用できる「ワイルドカード証明書」を利用すると便利
ワイルドカード証明書では、FQDNのうちホスト部分をアスタリスク(*)で指定する

X.509

公開鍵証明書の標準フォーマット

現在「公開鍵証明書と言えば基本的にこの形式」と言えるほど標準っぽい

openssl.cnf

証明書作成などを行うときの様々な設定が記載されているファイル

国名や都道府県名などの初期値を設定することもできる模様
ファイル格納場所は「/etc/pki/tls」配下など

関連する拡張子の種類

拡張子説明
.pemrsa暗号方式で暗号化されたファイル
鍵の種類を表しているわけではない
.key秘密鍵
.csr証明書発行要求のファイル
.crt認証局が署名した証明書のファイル

オレオレ証明書を作成するときのコマンド例

1. オレオレ認証局の秘密鍵作成

[例1] # open ssl genrsa -aes256 -out /etc/pki/CA/private/cakey.pem 2048
[例2] # openssl genrsa -aes128 2048 > server.key

メモ

aesXXXは暗号化方式使用可能な暗号化方式は「# openssl enc --help」で確認可能2048は鍵の長さで、最低でも2048ビット以上が推奨されている模様
秘密鍵ファイルの拡張子は「.pem」「.key」どちらのパターンもあるみたいで、おそらく好みの問題っぽい

2. 証明書発行要求ファイル(CSR)作成

[例1] # openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.csr
[例2] # openssl req -new -key server.key > server.csr

メモ

上記コマンドを実行すると、まず秘密鍵作成時に設定した「パスフレーズ」を聞かれる
その後、国名や都道府県名などを対話形式で設定していくことになる

ここで入力する各項目のデフォルト値はcnfファイルにて定義されている

3. オレオレ証明書(CRT)発行

[例1] # openssl x509 -days 3650 -in /etc/pki/CA/cacert.csr -req -signkey /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem
[例2] # openssl x509 -in server.csr -days 365000 -req -signkey server.key > server.crt

メモ

上記コマンドを実行すると秘密鍵(server.keyなど)のパスフレーズを聞かれる
本来であればCSRの提出先である中間認証局が実施する作業であり、中間認証局が保有している秘密鍵を用いて証明書が発行される

参考情報

【#26 情報処理安全確保支援士】認証局 / 投稿者:まさるの勉強部屋さん

参考:認証局とは?役割や種類を基礎から解説
参考:RSA鍵、証明書のファイルフォーマットについて
参考:今度こそopensslコマンドを理解して使いたい (1) ルートCAをスクリプトで作成する
参考:いちいち調べてられない!よく使うopensslコマンドまとめた

-学習記録, セキュリティ
-,