認証局(CA)と自己署名証明書の基礎

認証局の必要性 ----
ネットワーク通信において、中間者攻撃(MITM)の存在により、通信相手が本当に信頼できるかどうかを直接判断することが困難です。そのため、信頼できる第三者機関が通信双方の身元を「保証」する役割が重要になります。
### 中間者攻撃の防止
中間者攻撃では、攻撃者がクライアントの公開鍵を自身の公開鍵に置き換えてサーバーに送信するか、あるいはサーバーの公開鍵を置き換えることで、クライアントとサーバーが共に攻撃者の公開鍵を使ってデータを暗号化し、結果としてデータが窃取される可能性があります。
### 専門用語 ---- #### PKI:公開鍵基盤(Public Key Infrastructure)
認証局:CA(Certificate Authority)
登録機関:RA(Registration Authority)
証明書失効リスト:CRL(Certificate Revocation List)
証明書リポジトリ:
X.509:
証明書の構造と認証プロトコルの標準を定義
バージョン番号、シリアル番号、署名アルゴリズム
発行者、有効期限、主体名
主体公開鍵、CRL配布点、拡張情報、発行者署名
### 証明書取得の二つの方法 ---------
認証局経由での取得
1. 証明書署名要求(CSR)を生成
2. CSRをCAに送信
3. CAが署名して証明書を発行
自己署名証明書
1. プライベートCAを構築し、自身の公開鍵を自己署名する
### 実験1:プライベートCAの構築と証明書署名によるHTTPS通信実装 ---------------------------
説明:CA自身にも証明書が必要であり、その証明書は自己署名されています。
#### 第一部:プライベートCAの作成
OpenSSLの設定ファイル:デフォルトでは変更する必要はありません。必要なファイルを指定された場所に作成するだけです。
/etc/pki/tls/openssl.cnfにはCAの設定が含まれています。例えば、デフォルトのCA(CA_default)、証明書の保存ディレクトリ、シリアル番号、ポリシーなどです。重要な設定の一部を以下に示します。
[ CA_default ]
dir        = /etc/pki/CA        # すべてを保存する場所
certs        = $dir/certs        # 発行された証明書の保存場所
crl_dir    = $dir/crl        # 発行されたCRLの保存場所
database    = $dir/index.txt    # データベースインデックスファイル
new_certs_dir    = $dir/newcerts        # 新しい証明書のデフォルトの場所
certificate    = $dir/cacert.pem     # CA証明書(自己署名)の保存場所
serial        = $dir/serial         # 現在のシリアル番号
crlnumber    = $dir/crlnumber    # 現在のCRL番号
crl        = $dir/crl.pem         # 現在のCRL
private_key    = $dir/private/cakey.pem# CAの秘密鍵の保存場所
RANDFILE    = $dir/private/.rand    # プライベート乱数ファイル
x509_extensions    = usr_cert        # 証明書に追加する拡張
name_opt     = ca_default        # 主体名オプション
cert_opt     = ca_default        # 証明書フィールドオプション
default_days    = 365            # 証明書の有効期間
default_crl_days= 30            # 次のCRLまでの日数
default_md    = sha256        # デフォルトでSHA-256を使用
preserve    = no            # DNの順序を維持
policy        = policy_match
三つのポリシー:
match(一致):申請情報がCAの設定と一致する必要があります。これがデフォルトのポリシーです。
[ policy_match ]
countryName        = match
stateOrProvinceName    = match
organizationName    = match
organizationalUnitName    = optional
commonName        = supplied
emailAddress        = optional
optional(任意):CAの設定と一致しなくてもよい
supplied(必須):この項目の記入が必須
ステップ1:必要なファイルの作成
touch /etc/pki/CA/index.txt # 証明書インデックスデータベースファイルの作成
echo 01 > /etc/pki/CA/serial # 最初の証明書のシリアル番号を指定
ステップ2:CAの自己署名証明書作成
秘密鍵の生成
cd /etc/pki/CA/
(umask 066; openssl genrsa -out private/cakey.pem 2048)
ステップ3:自己署名証明書の生成
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
オプション説明:
-new:新しい証明書署名要求を生成
-x509:CAが自己署名証明書を生成するための専用オプション
-key:要求生成時に使用する秘密鍵ファイル
-days n:証明書の有効期間
-out /PATH/TO/SOMECERTFILE:証明書の保存パス
#### 第二部:プライベートCAへの証明書申請
ステップ1:証明書を使用するホストで証明書要求を生成
Webサーバー用の秘密鍵を生成
(umask 066; openssl genrsa –out /data/web_server.key 2048)
証明書申請ファイル(CSR)の生成
openssl req -new -key /data/web_server.key -out /data/web_server.csr
#### 第三部:CAによる証明書署名
openssl ca -in /data/web_server.csr –out /etc/pki/CA/certs/web_server.crt -days 365
注意:デフォルトでは、国、州、会社名の3項目がCAと一致する必要があります。
証明書を申請者に送信後、申請者のホストに.crtファイルが表示されます。
証明書内容の確認
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates

タグ: PKI HTTPS OpenSSL X.509 認証局

6月29日 00:03 投稿