#navi2(RaspberryPi/証明書,toc,prev,next) ---- #contents ---- * 簡易環境構築 [#i5224c03] 次のスクリプトを利用して、簡単に証明書生成環境を構築します。 https://ehobby.jp/data/public/ca.tar.gz ** ルート認証局 [#fe6b8bda] *** 環境構築 [#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] 2. 秘密鍵を生成します。 継続してよろしいですか? [y/n] <--y[Enter] Generating RSA private key, 2048 bit long modulus ..................+++ .............................................+++ e is 65537 (0x10001) Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ Verifying - Enter pass phrase for ..(省略)../priv.pem:<--秘密鍵のパスフレーズ 3. CSR (証明書署名要求) を作成します。 継続してよろしいですか? [y/n] <-- y[Enter] Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ ...(省略)... ■以下、ルート認証局の情報を入力します。 ※多くのルート認証局では、都道府県名、市町村名は指定されていないようです。 国名 (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 ..(省略)../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】を受け取る。⇒これがサーバー証明書となります。 **クライアント証明書 [#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 ファイルがクライアント認証で用いるファイルとなります。 ** クライアント認証のためのサーバー設定(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> **その他:各種証明書の確認 [#e1395a6b] 次のコマンドで、各種証明書の内容を確認できます。 bin/cert-show.sh [証明書ファイル] ---- #navi2(RaspberryPi/証明書,toc,prev,next)