証明書の生成 †
証明書の概要 †
T.B.D. 概要部分は書きかけです。。。m(__)m
サーバー証明書 †
+-----------------+
|ルート認証局(CA) |
+-----------------+
↓ルート認証局の秘密鍵を用いて署名
+-----------------+
|中間認証局(CA) |
+-----------------+
↓中間認証局の秘密鍵を用いて署名
+-----------------+
|サーバー証明書 |
+-----------------+
Webサーバー Webブラウザ
+---------------+ +---------------------------------+
|ルート証明書 | |ルート証明書 (信頼している証明書)|
+---------------+ +---------------------------------+
|中間証明書 |
+---------------+
|サーバー証明書 |
+---------------+
+---------------+
|サーバー秘密鍵 |
+---------------+
openssl のインストール †
aptitude install openssl
ルート証明書(CA)+秘密鍵作成 †
- openssl.conf ファイルをコピーする。
$ cd [任意のディレクトリ]
$ mkdir RootCA
$ mkdir RootCA/{certs,crl,newcerts,private}
$ chmod 700 RootCA/private
$ touch RootCA/index.txt
$ cp /etc/ssl/openssl.conf ./openssl_rootca.cnf
- openssl_rootca.conf の以下を修正
[ CA_default ]
#*dir = ./demoCA # Where everything is kept
dir = ./RootCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are keptir
~(省略)~
[ policy_match ]
# 署名のポリシー (-policy policy_match にて指定)
# match : CAと一致
# supplied : 記述が必須
# optiona : オプション
~(省略)~
[ usr_cert ]
crlDistributionPoints = URI:<失効リストのURL>
~(省略)~
[ v3_ca ]
~(省略)~
# 署名時に -extensions v3_ca を指定することで、
# ここに記載の失効リストのURL情報が付与される。
crlDistributionPoints = URI:<失効リストのURL>
~(省略)~
# サブジェクト代替名の設定
subjectAltName=@alt_names
[ alt_names ]
# ドメイン名リストを追加していく。
DNS.1 = <ドメイン名(例:ehobby.jp)>
DNS.2 = <ドメイン名(例:www.ehobby.jp や, *.ehobby.jp など)>
- シリアル番号設定 (署名の際のシリアル番号となる)
echo 01 > RootCA/serial
- ルート認証局(CA) の証明書と秘密鍵生成
$ oepnssl req \
-new \
-x509 \
-sha256 \
-config ./openssl_rootca.cnf \
-out RootCA/cacert.pem \
-days <有効期間(日数)> \
-keyout RootCA/private/cakey.pem \
-subj "/C=JP/ST=<都道府県名>/O=<会社名>/OU=<部署名>/CN=<ドメイン名>"
Enter PEM pass phrase: <任意のパスフレーズを入力>
Verifying - Enter PEM pass phrase: <確認のため、再度パスフレーズを入力>
上記のコマンドにより、次のファイルが生成されます。
※権限が異なる場合は、chmod で修正してください。
cacert.pem | ルート認証局(CA)証明書 | 権限:-rw-r--r-- (644) |
private/cakey.pem | ルート認証局(CA)の秘密鍵 | 権限:-rw------- (600) |
- 証明書の確認
次のコマンドで証明書の内容を確認できます。
openssl x509 -text -noout -in RootCA/cacert.pem
- pem 形式→der 形式変換 (ブラウザに取り込む場合などに利用)
openssl x509 -inform pem -in RootCA/cacert.pem -outform der -out RootCA/cacert.der
DER | Distinguished Encoding Rules | ASN.1のエンコード方式の一つ X.509 |
PEM | Privacy Enhanced Mail | Base64にてエンコードした形式 |
中間証明書(CA)+秘密鍵作成 †
- openssl.conf ファイルをコピーする。
# cd [任意のディレクトリ]
# mkdir IntermediateCA
# mkdir IntermediateCA/{certs,crl,newcerts,private}
# chmod 700 IntermediateCA/private
# touch IntermediateCA/index.txt
# cp /etc/ssl/openssl.conf ./openssl_intermediateca.cnf
- openssl_intermediate.conf の以下を修正
[ CA_default ]
#*dir = ./demoCA # Where everything is kept
dir = ./IntermediateCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are keptir
~(省略)~
[ usr_cert ]
crlDistributionPoints = URI:<失効リストのURL>
- シリアル番号設定 (署名の際のシリアル番号となる)
echo 01 > IntermediateCA/serial
- ルート認証局(CA) の証明書と秘密鍵生成
$ oepnssl req \
-new \
-sha256
-config ./openssl_intermediateca.cnf \
-out IntermediateCA/cacert_req.pem \
-days <有効期間(日数)> \
-keyout IntermediateCA/private/cakey.pem \
-subj "/C=JP/ST=<都道府県名>/O=<会社名>/OU=<部署名>/CN=<ドメイン名>"
Enter PEM pass phrase: <任意のパスフレーズを入力>
Verifying - Enter PEM pass phrase: <確認のため、再度パスフレーズを入力>
上記のコマンドにより、次のファイルが生成されます。
cacert_req.pem | 中間認証局(CA)証明書の署名要求ファイル | 権限:-rw-r--r-- |
private/cakey.pem | 中間認証局(CA)の秘密鍵 | 権限:-rw------- |
- ルート認証局による署名
- ルート認証局の cacert_req/ 配下に、cacert_req.pem を <ドメイン名>-cacert_req.pem ファイルとして配置する。
- ルート認証局のにて以下を実施する。
openssl ca \
-config ./openssl_rootca.cnf \
-policy policy_match \
-extensions v3_ca \
-days <有効期間(日数)> \
-out cacert_req/<ドメイン名>-cacert.pem
-infiles cacert_req/<ドメイン名>-cacert_req.pem
- 署名の確認
openssl verify -purpose sslclient -CAfile RootCA/cacert.pem \
cacert_req/<ドメイン名>-cacert.pem
- 署名後のファイルを中間認証局の IntermediateCA 配下に置く。