- 追加された行はこの色です。
- 削除された行はこの色です。
#navi2(RaspberryPi/証明書,toc,prev,next)
----
#contents
----
* 簡易環境構築 [#i5224c03]
次のスクリプトを利用して、簡単に証明書生成環境を構築します。
https://ehobby.jp/data/public/ca.tar.gz
** ルート認証局 [#fe6b8bda]
*** 環境構築 [#sec197d9]
*** 環境構築 [#ca7400b2]
以下、/var/lib/ssl/ca 配下に環境を構築するものとして記載します。
mkdir /var/lib/ssl
cd /var/lib/ssl
wget https://ehobby.jp/data/public/ca.tar.gz
tar zxvf ca.tar.gz
mv ca rootca
cd rootca
./cert-cainit.sh
1, 認証局の証明書管理環境を初期化します。
継続してよろしいですか? [y/n]
y[Enter] を入力します。
継続してよろしいですか? [y/n] <--y[Enter]
2. 秘密鍵を生成します。
継続してよろしいですか? [y/n]
y[Enter] を入力します。
継続してよろしいですか? [y/n] <--y[Enter]
Generating RSA private key, 2048 bit long modulus
..................+++
.............................................+++
e is 65537 (0x10001)
Enter pass phrase for /var/lib/ssl/rootca/private/privkey.pem:
秘密鍵のパスフレーズを入力します。
Verifying - Enter pass phrase for /var/lib/ssl/rootca/private/priv.pem:
再度秘密鍵のパスフレーズを入力します。
Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ
Verifying - Enter pass phrase for ..(省略)../priv.pem:<--秘密鍵のパスフレーズ
3. CSR (証明書署名要求) を作成します。
継続してよろしいですか? [y/n]
y[Enter] を入力します。
Enter pass phrase for /var/lib/ssl/rootca/private/privkey.pem:
秘密鍵のパスフレーズを入力します。
継続してよろしいですか? [y/n] <-- y[Enter]
Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ
...(省略)...
国名 (2文字コード) [JP]:
国名を入力します。日本であれば JP[Enter] を入力します。
都道府県名 []:[]
都道府県名を入力します。入力が不要であれば、そのまま [Enter] を入力します。
※多くのルート認証局では、都道府県名を指定していません。
市町村名 []:[]
市町村名を入力します。入力が不要であれば、そのまま [Enter] を入力します。
※多くのルート認証局では、市町村名を指定していません。
組織名 [Ehotty]:[]
組織名を入力します。
部門名 []:[]
部門名を入力します。
コモンネーム(名前, サーバーホスト名など) []:[]
コモンネームを入力します。
例) XXXX Root CA
Eメールアドレス []:[]
Eメールアドレスを入力します。
パスワード [8-20文字] (空でも良い) []:[]
拡張設定として、パスワードを入力します。
不要であれば、そのまま [Enter] を入力します。
オプション国名 (空でも良い) []:[]
オプションとなる国名を入力します。
不要であれば、そのまま [Enter] を入力します。
■以下、ルート認証局の情報を入力します。
※多くのルート認証局では、都道府県名、市町村名は指定されていないようです。
国名 (2文字コード) [JP]: <--国名(日本であればJP)
都道府県名 []:[] <--都道府県名([Enter]で指定なし)
市町村名 []:[] <--市町村名([Enter]で指定なし)
組織名 [Ehotty]:[] <--組織名
部門名 []:[] <--部門名([Enter]で指定なし)
コモンネーム(名前, サーバーホスト名など) []:[] <--例: XXX Root CA
Eメールアドレス []:[] <--Eメールアドレス([Enter]で指定なし)
パスワード [8-20文字] (空でも良い) []:[] <--オプションパスワード([Enter]で指定なし)
オプション国名 (空でも良い) []:[] <--オプション国名([Enter]で指定なし)
4. 自己署名します。
継続してよろしいですか? [y/n]:[]
y[Enter] を入力します。
Enter pass phrase for bin/../private/privkey.pem:
秘密鍵のパスフレーズを入力します。
継続してよろしいですか? [y/n]:[] <--y[Enter]
Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ
次のコマンドにて、CPSの情報や、CRL、OCSP のURL等の情報を設定します。
詳細は、コマンドのヘルプを参照ください。
bin/cert-mkcnf.sh
***証明書への署名 [#sd80a749]
次のコマンドで指定された、CSRに署名します。
bin/cert-sign.sh [CSRファイル]
サーバー証明書の場合は、--dns1 ドメイン名 の指定が必要です。
その他、オプションについては、 次のコマンドを確認ください。
bin/cert-sign.sh --help
※署名した証明書は、newcerts 配下にも格納されます。
***証明書の失効 [#z45a8f4b]
署名した証明書を失効させる場合、次のコマンドで失効させます。
bin/cert-revoke.sh [失効させる証明書]
※CRLファイルが、crl/latestcrl.crl に生成されるので、
適切な場所に配置して、Web経由で取得できるようにしてください。
※CRLファイルのみ生成したい場合は、次のコマンドで生成可能です。
bin/cert-mkcrl.sh
** 中間認証局 [#a8023291]
基本的にルート認証局と同様ですが、自己署名ではなく、
ルート認証局に署名してもらいます。具体的には、
4. 自己署名します。
継続してよろしいですか? [y/n]:[]
にて n[Enter] を入力し、次の操作をします。
+bin/cert-mkcnf.sh にて中間認証局用の設定を実施する。
+ルート認証局に「request.csr」ファイルを渡す。
+【ルート認証局での操作】bin/cert-sign.sh --type ca 【受け取ったrequest.csrファイル】
+ルート認証局より、生成された【request_signed.pem, request_signed.crt】を受け取る。
+受け取ったファイルをそれぞれ、【cacert.pem, cacert.crt】にリネームして配置する。
以降、署名や失効管理はルート認証局と同様となります。
★ここで構築する中間認証局は、末端の認証局となり、CAに対する署名はできません。
CAに対する署名が必要な場合は、ルート認証局にて署名の際、openssl_ca.cnf ファイルの basicConstraints の pathlen: 0 を削除してから署名してください。
**サーバー証明書 [#j3f6f68e]
+次の手順で CSR を生成します。
cd xxxxx <--任意のディレクトリ
wget https://ehobby.jp/data/public/ca.tar.gz
tar zxvf ca.tar.gz
mv ca server
cd server
mkdir private
bin/cert-mkcsr.sh
..(省略)../privkey.pem を生成します。[y/n] <--y[Enter]
Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ
Verifying - ..(省略).. <--秘密鍵のパスフレーズ
秘密鍵(..(省略)..)を生成しました。
Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ
..(省略)..
■以下、サーバー証明書の情報を入力します。
コモンネームには、ドメイン名を指定してください。
(ドメイン名が無い場合は、固定IPアドレスを指定してください。)
+認証局に、生成された 「request.csr」ファイルを渡す。
+【認証局での操作】bin/cert-sign.sh --type server --dns1 【ドメイン名】 【CSRファイル】
※ドメイン名が複数ある場合は、--dns2, --dns3 等を指定してください。
+認証局より、生成された【request_signed.pem, request_signed.crt】を受け取る。⇒これがサーバー証明書となります。
** 秘密鍵生成 [#w49334c5]
openssl genrsa -sha256 -out private/privkey.pem 2048
**クライアント証明書 [#ke63f594]
+次の手順で CSR を生成します。
cd xxxxx <--任意のディレクトリ
wget https://ehobby.jp/data/public/ca.tar.gz
tar zxvf ca.tar.gz
mv ca server
cd server
mkdir private
bin/cert-mkcsr.sh
..(省略)../privkey.pem を生成します。[y/n] <--y[Enter]
Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ
Verifying - ..(省略).. <--秘密鍵のパスフレーズ
秘密鍵(..(省略)..)を生成しました。
Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ
..(省略)..
■以下、クライアント証明書の情報を入力します。
+認証局に、生成された 「request.csr」ファイルを渡す。
+【認証局での操作】bin/cert-sign.sh --type client【CSRファイル】
+認証局より、生成された【request_signed.pem, request_signed.crt】を受け取る。
+下記コマンドを実行して pkcs12 形式ファイルを生成する。
bin/cert-mkpkcs12 request_signed.pem private/privkey.pem 【任意の名前】
→生成された output.p12 ファイルがクライアント認証で用いるファイルとなります。
|INPUT | - |
|OUTPUT |private/privkey.pem |
** クライアント認証のためのサーバー設定(Apache) [#d21d5ca8]
クライアント証明書に署名した認証局が、中間認証局の場合、上位認証局の証明書を連結したファイルを作成します。
cat rootca.pem ca.pem > chain.pem
Apacheの場合、以下の設定をします。
SSLCACertificateFile /var/lib/ssl/ca/chain.pem $ <- 認証局の証明書ファイル
SSLCARevocationFile /var/lib/ca/crl/latestcrl.crl # <- CRLのファイルパス
<Directory 【クライアント認証が必要なパス】>
SSLRequreSSL
SSLVerifyClient require
SSLVerifyDepth 10
</Directory>
オプションの詳細については、下記コマンドで確認ください。
openssl genrsa --help
** CSR生成 [#cc50f30d]
openssl req -new -config conf/openssl.cnf \
-key private/privkey.pem \
-days 730 \
-sha256 \
"/C=JP/O=Ehobby/CN=Ehobby Root CA" \
-out request.csr
**その他:各種証明書の確認 [#e1395a6b]
次のコマンドで、各種証明書の内容を確認できます。
bin/cert-show.sh [証明書ファイル]
|INPUT |private/privkey.pem |
|OUTPUT |request.csr |
オプションの詳細については、下記コマンドで確認ください。
openssl req --help
** 署名(自己署名) [#jcf2fd10]
openssl x509 -req -sha -extfile conf/openssl.cnf \
-extensions v3_ca \
-days 730 \
-out cacert.pem \
-in request.csr \
-signkey private/privkey.pem
openssl x509 -inform pem -in cacert.pem \
-outform der -out cacert.crt
|INPUT |private/privkey.pem, request.csr |
|OUTPUT |cacert.pem , cacert.crt |
オプションの詳細については、下記コマンドを確認ください。
openssl x509 --help
----
#navi2(RaspberryPi/証明書,toc,prev,next)