認証局の構築して電子証明書を発行する!(OpenSSL)

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証明書、コードサイニング証明書を発行しました。