OpenSSLを使用して認証局(CA)を構築します。本稿では、ルートの認証局配下に、発行する証明書の種類ごとに中間の認証局を設置します。中間の認証局としては、サーバ証明書、クライアント証明書、S/MIME証明書、コードサイニング証明書発行用の認証局を設けます。
記事の目次
認証局が発行する証明書の仕様
認証局が発行する証明書の仕様を記載します。
ルート証明書
ルートの認証局の証明書の作成情報(例)です。
項目 | 値 |
---|---|
有効期間(日) | 6935 |
鍵長(bit) | 2048 |
ハッシュアルゴリズム | SHA-256 |
C | JP |
ST | |
L | |
O | Laboratory for Personal ICT |
OU | Certificate Authority |
CN | Laboratory for Personal ICT CA Root – AA1 |
サーバ証明書
サーバ証明書の作成情報の例を記載します。
サーバ証明書用の中間証明書の作成情報
サーバ証明書用の中間証明書の作成情報(例)です。
項目 | 値 |
---|---|
有効期間(日) | 3650 |
鍵長(bit) | 2048 |
ハッシュアルゴリズム | SHA-256 |
C | JP |
ST | |
L | |
O | Laboratory for Personal ICT |
OU | Certificate Authority |
CN | Laboratory for Personal ICT CA – SE1 |
サーバ証明書の発行情報
サーバ証明書の発行情報(例)です。Laboratory for Personal ICT/Laboratory Oneで構築したサーバや開発したシステムで使用するイメージになります。公開用のWebサーバでは、パブリック認証局で署名された証明書を使用しますが、パブリック認証局での署名を必要としない、組織内での暗号化通信や、POPS/IMAPSサーバ、製品の管理コンソールの暗号化などに使用することができます。
項目 | 値 |
---|---|
有効期間(日) | 365 |
鍵長(bit) | 2048 |
ハッシュアルゴリズム | SHA-256 |
C | JP |
ST | Galaxy |
L | Earth |
O | Laboratory for Personal ICT |
OU | Laboratory One |
CN | lab4ict.com |
クライアント証明書
クライアント証明書の作成情報の例を記載します。
クライアン証明書用の中間証明書の作成情報
クライアン証明書用の中間証明書の作成情報(例)です。
項目 | 値 |
---|---|
有効期間(日) | 3650 |
鍵長(bit) | 2048 |
ハッシュアルゴリズム | SHA-256 |
C | JP |
ST | |
L | |
O | Laboratory for Personal ICT |
OU | Certificate Authority |
CN | Laboratory for Personal ICT CA – CL1 |
クライアント証明書の発行情報
クライアント証明書の発行情報(例)です。公開用のWebサイトへのアクセス制御に使用すると効果的です。Webサイトにアクセスするユーザごとに、クライアント証明書を発行します。
項目 | 値 |
---|---|
有効期間(日) | 365 |
鍵長(bit) | 2048 |
ハッシュアルゴリズム | SHA-256 |
C | JP |
ST | Galaxy |
L | Earth |
O | Laboratory for Personal ICT |
OU | Laboratory One |
CN | Site User-001 |
S/MIME証明書
S/MIME用の証明書の作成情報の例を記載します。
S/MIME用の中間証明書の発行情報
S/MIME用の中間証明書の発行情報(例)です。
項目 | 値 |
---|---|
有効期間(日) | 3650 |
鍵長(bit) | 2048 |
ハッシュアルゴリズム | SHA-256 |
C | JP |
ST | |
L | |
O | Laboratory for Personal ICT |
OU | Certificate Authority |
CN | Laboratory for Personal ICT CA – EM1 |
S/MIME用の証明書の発行情報
S/MIME用の証明書の発行情報(例)です。インターネット間で不特定多数の関係者と暗号化メールをや電子署名を利用する場合は、パブリック認証局での署名をした証明書が必要になりますが、認証局の証明書を配布可能な組織間やシステム間での情報連携でメールを使用する場合に使用可能な場面があるかもしれません。目的に合わせて、ユーザごとあるいはシステムごとに証明書を発行します。
項目 | 値 |
---|---|
有効期間(日) | 365 |
鍵長(bit) | 2048 |
ハッシュアルゴリズム | SHA-256 |
C | JP |
ST | Galaxy |
L | Earth |
O | Laboratory for Personal ICT |
OU | Laboratory One |
CN | Site User-001 |
E | user001@lab4ict.com |
コードサイニング証明書
コードサイニング用の証明書の作成情報の例を記載します。
コードサイニング用の中間証明書の作成情報
コードサイニング用の中間証明書の作成情報(例)です。
項目 | 値 |
---|---|
有効期間(日) | 3650 |
鍵長(bit) | 2048 |
ハッシュアルゴリズム | SHA-256 |
C | JP |
ST | |
L | |
O | Laboratory for Personal ICT |
OU | Certificate Authority |
CN | Laboratory for Personal ICT CA – OB1 |
コードサイニング用の証明書の発行情報
コードサイニング用の証明書の発行情報(例)です。プログラムコード作成者を示します。リモート開発をしている場合など、組織内での使用方法があるかもしれません。
項目 | 値 |
---|---|
有効期間(日) | 365 |
鍵長(bit) | 2048 |
ハッシュアルゴリズム | SHA-256 |
C | JP |
ST | Galaxy |
L | Earth |
O | Laboratory for Personal ICT |
OU | Laboratory One |
CN | Site User-001 |
認証局構築と証明書発行の準備
認証局用のユーザを作成します。
sudo addgroup casystem sudo adduser --ingroup casystem casystem sudo gpasswd -a casystem sudo su - casystem
各認証局用のディレクトリを作成します。本稿では、各認証局をすべて同一マシン上に構築していますが、認証局毎に分けることもできます。その場合は、ルート認証局と各種証明書発行用の認証局との間で、「CSR」と「ルートの認証局で署名した中間証明書」の受け渡しを行います。
cd /home/casystem mkdir ./CA mkdir ./CA/CA-AA1 mkdir ./CA/CA-SE1 mkdir ./CA/CA-CL1 mkdir ./CA/CA-EM1 mkdir ./CA/CA-OB1
各証明書のCSR、秘密鍵、認証局で署名済みの証明書を保管するディレクトリを作成します。本稿では、各証明書のCSR作成と認証局による署名を同じマシン上で行っていますが、別なマシンとするケースもあります。その場合は、証明書の発行を依頼する側と認証局との間で、「CSR」と「認証局で署名した証明書」の受け渡しを行います。
mkdir ./CA/cert-SE1 mkdir ./CA/cert-CL1 mkdir ./CA/cert-EM1 mkdir ./CA/cert-OB1
ルート認証局の構築とルート証明書の発行
ルート認証局用のディレクトリを作成します。
cd /home/casystem/CA/CA-AA1 mkdir ./certs mkdir ./private mkdir ./crl mkdir ./newcerts chmod 700 ./private echo "01" > ./serial touch ./index.txt
OpenSSLのオリジナルの設定ファイルをコピーして、ルート証明書発行用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp /etc/ssl/openssl.cnf /etc/ssl/openssl-req-CA-AA1.cnf sudo vi /etc/ssl/openssl-req-CA-AA1.cnf [ CA_default ] dir = /home/casystem/CA/CA-AA1 x509_extensions = v3_ca default_days = 6935 default_bits = 2048 default_md = sha256 policy = policy_anything [ req ] default_bits = 2048 default_md = sha256 req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName_default = JP 0.organizationName_default = Laboratory for Personal ICT organizationalUnitName_default = Certificate Authority commonName_default = Laboratory for Personal ICT CA Root - AA1 [ v3_req ] basicConstraints = CA:TRUE
自己署名による署名を行います。
openssl req -new -x509 -newkey rsa:2048 -out ./cacert.pem -keyout ./private/cakey.pem -config /etc/ssl/openssl-req-CA-AA1.cnf
証明書の内容を表示します。
openssl x509 -noout -in ./cacert.pem -text
DER形式に変換します。
openssl x509 -inform PEM -outform DER -in ./cacert.pem -out ./cacert.der
サーバ証明書用の認証局の構築と証明書の発行
サーバ証明書用の認証局の構築し、サーバ証明書を発行します。
サーバ証明書用の中間証明書の発行
認証局用のディレクトリを作成します。
cd /home/casystem/CA/CA-SE1 mkdir ./certs mkdir ./private mkdir ./crl mkdir ./newcerts chmod 700 ./private echo "01" > ./serial touch ./index.txt
OpenSSLのオリジナルの設定ファイルをコピーして、中間証明書のCSR作成用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp /etc/ssl/openssl.cnf /etc/ssl/openssl-req-CA-SE1.cnf sudo vi /etc/ssl/openssl-req-CA-SE1.cnf [ CA_default ] dir = /home/casystem/CA/CA-SE1 [ req ] default_bits = 2048 default_md = sha256 req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName_default = JP 0.organizationName_default = Laboratory for Personal ICT organizationalUnitName_default = Certificate Authority commonName_default = Laboratory for Personal ICT CA - SE1 [ v3_req ] basicConstraints = CA:TRUE
CSRを作成します。
openssl req -new -newkey rsa:2048 -out ./cacert_req.pem -keyout ./private/cakey.pem -config /etc/ssl/openssl-req-CA-SE1.cnf
CSRの内容を表示します。
openssl req -noout -in ./cacert_req.pem -text
OpenSSLのオリジナルの設定ファイルをコピーして、ルート証明書による署名用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp /etc/ssl/openssl.cnf /etc/ssl/openssl-CA-AA1-SE1.cnf sudo vi /etc/ssl/openssl-CA-AA1-SE1.cnf [ CA_default ] dir = /home/casystem/CA/CA-AA1 x509_extensions = v3_ca default_days = 3650 default_bits = 2048 default_md = sha256 policy = policy_anything [ v3_ca ] basicConstraints = CA:true nsCertType = sslCA
認証局による署名を行います。
openssl ca -config /etc/ssl/openssl-CA-AA1-SE1.cnf -out ./cacert.pem -infiles ./cacert_req.pem
ルート証明書による検証を行います。
openssl verify -CAfile /home/casystem/CA/CA-AA1/cacert.pem ./cacert.pem
証明書の内容を表示します。
openssl x509 -noout -in ./cacert.pem -text
DER形式に変換します。
openssl x509 -inform PEM -outform DER -in ./cacert.pem -out ./cacert.der
サーバ証明書の発行
証明書用のディレクトリを作成します。
cd /home/casystem/CA/cert-SE1 mkdir ./certs mkdir ./private mkdir ./crl mkdir ./newcerts chmod 700 ./private echo "01" > ./serial touch ./index.txt mkdir ./dist
OpenSSLのオリジナルの設定ファイルをコピーして、CSR作成用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-req-cert-SE1.cnf sudo vi /etc/ssl/openssl-req-cert-SE1.cnf [ CA_default ] dir = /home/casystem/CA/cert-SE1 [ req ] default_bits = 2048 default_md = sha256 req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName_default = JP stateOrProsudo vinceName_default = Galaxy localityName_default = Earth 0.organizationName_default = Laboratory for Personal ICT organizationalUnitName_default = Certificate Authority commonName_default = lab4ict.com [ v3_req ] basicConstraints = CA:FALSE
CSRを作成します。
openssl req -new -newkey rsa:2048 -out ./secert_lab4ict_req.pem -keyout ./private/sekey_lab4ict.pem -config /etc/ssl/openssl-req-cert-SE1.cnf
CSRの内容を表示します。
openssl req -noout -in ./secert_lab4ict_req.pem -text
OpenSSLのオリジナルの設定ファイルをコピーして、中間証明書による署名用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-CA-SE1.cnf sudo vi /etc/ssl/openssl-CA-SE1.cnf [ CA_default ] dir = /home/casystem/CA/CA-SE1 x509_extensions = usr_cert default_days = 3650 default_bits = 2048 default_md = sha256 policy = policy_anything [ usr_cert ] basicConstraints=CA:FALSE nsCertType = server
認証局による署名を行います。
openssl ca -config /etc/ssl/openssl-CA-SE1.cnf -out ./secert_lab4ict.pem -infiles ./secert_lab4ict_req.pem
中間証明書による検証を行います。
cat /home/casystem/CA/CA-AA1/cacert.pem /home/casystem/CA/CA-SE1/cacert.pem > ./cacert_verify.pem openssl verify -CAfile ./cacert_verify.pem ./secert_lab4ict.pem
証明書の内容を表示します。
openssl x509 -noout -in ./secert_lab4ict.pem -text
DER形式に変換します。
openssl x509 -inform PEM -outform DER -in ./secert_lab4ict.pem -out ./secert_lab4ict.der
PKCS12形式に変換します。
openssl pkcs12 -export -in ./secert_lab4ict.pem -inkey ./private/sekey_lab4ict.pem -out ./secert_lab4ict.p12
パスワード無しのPEM形式に変換します。
openssl rsa -in ./private/sekey_lab4ict.pem -out ./private/sekey_lab4ict_nopass.pem
作成したファイルを保管用のフォルダに移動します。
mv ./secert* ./dist
クライアント証明書用の認証局の構築と証明書の発行
クライアント証明書用の認証局を構築し、クライアント証明書を作成します。
クライアント証明書用の中間証明書の発行
認証局用のディレクトリを作成します。
cd /home/casystem/CA/CA-CL1 mkdir ./certs mkdir ./private mkdir ./crl mkdir ./newcerts chmod 700 ./private echo "01" > ./serial touch ./index.txt
OpenSSLのオリジナルの設定ファイルをコピーして、中間証明書のCSR作成用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-req-CA-CL1.cnf sudo vi /etc/ssl/openssl-req-CA-CL1.cnf [ CA_default ] dir = /home/casystem/CA/CA-CL1 [ req ] default_bits = 2048 default_md = sha256 req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName_default = JP 0.organizationName_default = Laboratory for Personal ICT organizationalUnitName_default = Certificate Authority commonName_default = Laboratory for Personal ICT CA - CL1 [ v3_req ] basicConstraints = CA:TRUE
CSRを作成します。
openssl req -new -newkey rsa:2048 -out ./cacert_req.pem -keyout ./private/cakey.pem -config /etc/ssl/openssl-req-CA-CL1.cnf
CSRの内容を表示します。
openssl req -noout -in ./cacert_req.pem -text
OpenSSLのオリジナルの設定ファイルをコピーして、ルート証明書による署名用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-CA-AA1-CL1.cnf sudo vi /etc/ssl/openssl-CA-AA1-CL1.cnf [ CA_default ] dir = /home/casystem/CA/CA-AA1 x509_extensions = v3_ca default_days = 3650 default_bits = 2048 default_md = sha256 policy = policy_anything [ v3_ca ] basicConstraints = CA:true nsCertType = sslCA
ルート認証局による署名を行います。
openssl ca -config /etc/ssl/openssl-CA-AA1-CL1.cnf -out ./cacert.pem -infiles ./cacert_req.pem
ルート証明書による検証を行います。
openssl verify -CAfile /home/casystem/CA/CA-AA1/cacert.pem ./cacert.pem
証明書の内容を表示します。
openssl x509 -noout -in ./cacert.pem -text
DER形式に変換します。
openssl x509 -inform PEM -outform DER -in ./cacert.pem -out ./cacert.der
クライアント証明書の発行
証明書用のディレクトリを作成します。
cd /home/casystem/CA/cert-CL1 mkdir ./certs mkdir ./private mkdir ./crl mkdir ./newcerts chmod 700 ./private echo "01" > ./serial touch ./index.txt mkdir ./dist
OpenSSLのオリジナルの設定ファイルをコピーして、CSR作成用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-req-cert-CL1.cnf sudo vi /etc/ssl/openssl-req-cert-CL1.cnf [ CA_default ] dir = /home/casystem/CA/cert-CL1 [ req ] default_bits = 2048 default_md = sha256 req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName_default = JP stateOrProsudo vinceName_default = Galaxy localityName_default = Earth 0.organizationName_default = Laboratory for Personal ICT organizationalUnitName_default = Certificate Authority commonName_default = Site User-001 [ v3_req ] basicConstraints = CA:FALSE
CSRを作成します。
openssl req -new -newkey rsa:2048 -out ./clcert_001_req.pem -keyout ./private/clkey_001.pem -config /etc/ssl/openssl-req-cert-CL1.cnf
CSRの内容を表示します。
openssl req -noout -in ./clcert_001_req.pem -text
OpenSSLのオリジナルの設定ファイルをコピーして、中間証明書による署名用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-CA-CL1.cnf sudo vi /etc/ssl/openssl-CA-CL1.cnf [ CA_default ] dir = /home/casystem/CA/cert-CL1 x509_extensions = usr_cert default_days = 3650 default_bits = 2048 default_md = sha256 policy = policy_anything [ usr_cert ] basicConstraints = CA:FALSE nsCertType = client
認証局による署名を行います。
openssl ca -config /etc/ssl/openssl-CA-CL1.cnf -out ./clcert_001.pem -infiles ./clcert_001_req.pem
中間証明書による検証を行います。
cat /home/casystem/CA/CA-AA1/cacert.pem /home/casystem/CA/CA-CL1/cacert.pem > ./cacert_verify.pem openssl verify -CAfile ./cacert_verify.pem ./clcert_001.pem
証明書の内容を表示します。
openssl x509 -noout -in ./clcert_001.pem -text
DER形式に変換します。
openssl x509 -inform PEM -outform DER -in ./clcert_001.pem -out ./clcert_001.der
PKCS12形式に変換します。
openssl pkcs12 -export -in ./clcert_001.pem -inkey ./private/clkey_001.pem -out ./clcert_001.p12
作成したファイルを保管用のフォルダに移動します。
mv ./clcert* ./dist
S/MIME用の認証局の構築と証明書の発行
S/MIME用の認証局を構築し、S/MIME証明書を作成します。
S/MIME用の中間証明書の発行
認証局用のディレクトリを作成します。
cd /home/casystem/CA/CA-EM1 mkdir ./certs mkdir ./private mkdir ./crl mkdir ./newcerts chmod 700 ./private echo "01" > ./serial touch ./index.txt
OpenSSLのオリジナルの設定ファイルをコピーして、中間証明書のCSR作成用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-req-CA-EM1.cnf sudo vi /etc/ssl/openssl-req-CA-EM1.cnf [ CA_default ] dir = /home/casystem/CA/CA-EM1 [ req ] default_bits = 2048 default_md = sha256 req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName_default = JP 0.organizationName_default = Laboratory for Personal ICT organizationalUnitName_default = Certificate Authority commonName_default = ICT Personal Laboratory CA - EM1 [ v3_req ] basicConstraints = CA:TRUE
CSRを作成します。
openssl req -new -newkey rsa:2048 -out ./cacert_req.pem -keyout ./private/cakey.pem -config /etc/ssl/openssl-req-CA-EM1.cnf
CSRの内容を表示します。
openssl req -noout -in ./cacert_req.pem -text
OpenSSLのオリジナルの設定ファイルをコピーして、ルート証明書による署名用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-CA-AA1-EM1.cnf sudo vi /etc/ssl/openssl-CA-AA1-EM1.cnf [ CA_default ] dir = /home/casystem/CA/CA-EM1 x509_extensions = v3_ca default_days = 3650 default_bits = 2048 default_md = sha256 policy = policy_anything [ v3_ca ] basicConstraints = CA:true nsCertType = emailCA
認証局による署名を行います。
openssl ca -config /etc/ssl/openssl-CA-AA1-EM1.cnf -out ./cacert.pem -infiles ./cacert_req.pem
ルート証明書による検証を行います。
openssl verify -CAfile /home/casystem/CA/CA-AA1/cacert.pem ./cacert.pem
証明書の内容を表示します。
openssl x509 -noout -in ./cacert.pem -text
DER形式に変換します。
openssl x509 -inform PEM -outform DER -in ./cacert.pem -out ./cacert.der
S/MIME証明書の発行
証明書用のディレクトリを作成します。
cd /home/casystem/CA/cert-EM1 mkdir ./certs mkdir ./private mkdir ./crl mkdir ./newcerts chmod 700 ./private echo "01" > ./serial touch ./index.txt mkdir ./dist
OpenSSLのオリジナルの設定ファイルをコピーして、CSR作成用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-req-cert-EM1.cnf sudo vi /etc/ssl/openssl-req-cert-EM1.cnf [ CA_default ] dir = /home/casystem/CA/cert-EM1 [ req ] default_bits = 2048 default_md = sha256 req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName_default = JP stateOrProsudo vinceName_default = Galaxy localityName_default = Earth 0.organizationName_default = Laboratory for Personal ICT organizationalUnitName_default = Laboratory One commonName_default = Site User-001 emailAddress_default = user-001@lab4ict.com [ v3_req ] basicConstraints = CA:FALSE
CSRを作成します。
openssl req -new -newkey rsa:2048 -out ./emcert_001_req.pem -keyout ./private/emkey_001.pem -config /etc/ssl/openssl-req-cert-EM1.cnf
CSRの内容を表示します。
openssl req -noout -in ./emcert_001_req.pem -text
OpenSSLのオリジナルの設定ファイルをコピーして、中間証明書による署名用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-CA-EM1.cnf sudo vi /etc/ssl/openssl-CA-EM1.cnf [ CA_default ] dir = /home/casystem/CA/cert-em1 x509_extensions = usr_cert default_days = 3650 default_bits = 2048 default_md = sha256 policy = policy_anything [ usr_cert ] basicConstraints = CA:FALSE nsCertType = email
認証局による署名を行います。
openssl ca -config /etc/ssl/openssl-CA-EM1.cnf -out ./emcert_001.pem -infiles ./emcert_001_req.pem
中間証明書による検証を行います。
cat /home/casystem/CA/CA-AA1/cacert.pem /home/casystem/CA/CA-EM1/cacert.pem > ./cacert_verify.pem openssl verify -CAfile ./cacert_verify.pem ./emcert_001.pem
証明書の内容を表示します。
openssl x509 -noout -in ./emcert_001.pem -text
DER形式に変換します。
openssl x509 -inform PEM -outform DER -in ./emcert_001.pem -out ./emcert_001.der
PKCS12形式に変換します。
openssl pkcs12 -export -in ./emcert_001.pem -inkey ./private/emkey_001.pem -out ./emcert_001.p12
作成したファイルを保管用のフォルダに移動します。
mv ./emcert* ./dist
コードサインニング用の認証局の構築と証明書の発行
コードサイニング用の認証局を構築し、コードサイニング証明書を作成します。
コードサインニング証明書用の中間証明書の発行
認証局用のディレクトリを作成します。
cd /home/casystem/CA/CA-OB1 mkdir ./certs mkdir ./private mkdir ./crl mkdir ./newcerts chmod 700 ./private echo "01" > ./serial touch ./index.txt
OpenSSLのオリジナルの設定ファイルをコピーして、中間証明書のCSR作成用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-req-CA-OB1.cnf sudo vi /etc/ssl/openssl-req-CA-OB1.cnf [ CA_default ] dir = /home/casystem/CA/CA-OB1 [ req ] default_bits = 2048 default_md = sha256 req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName_default = JP 0.organizationName_default = Laboratory for Personal ICT organizationalUnitName_default = Certificate Authority commonName_default = Laboratory for Personal ICT CA - OB1 [ v3_req ] basicConstraints = CA:TRUE
CSRを作成します。
openssl req -new -newkey rsa:2048 -out ./cacert_req.pem -keyout ./private/cakey.pem -config /etc/ssl/openssl-req-CA-OB1.cnf
CSRの内容を表示します。
openssl req -noout -in ./cacert_req.pem -text
OpenSSLのオリジナルの設定ファイルをコピーして、ルート証明書による署名用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-CA-AA1-OB1.cnf sudo vi /etc/ssl/openssl-CA-AA1-OB1.cnf [ CA_default ] dir = /home/casystem/CA/CA-AA1 x509_extensions = v3_ca default_days = 3650 default_bits = 2048 default_md = sha256 policy = policy_anything [ v3_ca ] nsCertType = objCA
認証局による署名を行います。
openssl ca -config /etc/ssl/openssl-CA-AA1-OB1.cnf -out ./cacert.pem -infiles ./cacert_req.pem
ルート証明書による検証を行います。
openssl verify -CAfile /home/casystem/CA/CA-AA1/cacert.pem ./cacert.pem
証明書の内容を表示します。
openssl x509 -noout -in ./cacert.pem -text
DER形式に変換します。
openssl x509 -inform PEM -outform DER -in ./cacert.pem -out ./cacert.der
コードサインニング証明書の発行
証明書用のディレクトリを作成します。
cd /home/casystem/CA/cert-OB1 mkdir ./certs mkdir ./private mkdir ./crl mkdir ./newcerts chmod 700 ./private echo "01" > ./serial touch ./index.txt mkdir ./dist
OpenSSLのオリジナルの設定ファイルをコピーして、CSR作成用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-req-cert-OB1.cnf sudo vi /etc/ssl/openssl-req-cert-OB1.cnf [ CA_default ] dir = /home/casystem/CA/cert-OB1 [ req ] default_bits = 2048 default_md = sha256 req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName_default = JP stateOrProsudo vinceName_default = Galaxy localityName_default = Earth 0.organizationName_default = Laboratory for Personal ICT organizationalUnitName_default = Laboratory One commonName_default = Site User-001 [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment, codeSigning
CSRを作成します。
openssl req -new -newkey rsa:2048 -out ./obcert_001_req.pem -keyout private/obkey_001.pem -config /etc/ssl/openssl-req-cert-OB1.cnf
CSRの内容を表示します。
openssl req -noout -in obcert_001_req.pem -text
OpenSSLのオリジナルの設定ファイルをコピーして、中間証明書による署名用の設定ファイルを作成します。確認および変更が必要な設定のみ記載します。
sudo cp -p /etc/ssl/openssl.cnf /etc/ssl/openssl-CA-OB1.cnf sudo vi /etc/ssl/openssl-CA-OB1.cnf [ CA_default ] dir = /home/casystem/CA/CA-OB1 x509_extensions = usr_cert default_days = 3650 default_bits = 2048 default_md = sha256 policy = policy_anything [ usr_cert ] basicConstraints = CA:FALSE nsCertType = objSign
認証局による署名を行います。
openssl ca -out ./obcert_001.pem -config /etc/ssl/openssl-CA-OB1.cnf -infiles ./obcert_001_req.pem
中間証明書による検証を行います。
cat /home/casystem/CA/CA-AA1/cacert.pem /home/casystem/CA/CA-OB1/cacert.pem > ./cacert_verify.pem openssl verify -CAfile ./cacert_verify.pem ./obcert_001.pem
証明書の内容を表示します。
openssl x509 -noout -in ./obcert_001.pem -text
DER形式に変換します。
openssl x509 -inform PEM -outform DER -in ./obcert_001.pem -out ./obcert.001.der
PKCS12形式に変換します。
openssl pkcs12 -export -in ./obcert_001.pem -inkey ./private/obkey_001.pem -out ./obcert_001.p12
作成したファイルを保管用のフォルダに移動します。
mv ./obcert* ./dist
おわりに
本稿では、ルートの認証局を頂点に発行する証明書の種類別に中間の認証局を構築し、サーバ証明書、クライアント証明書、S/MIME証明書、コードサイニング証明書を発行しました。