次のコマンドを入力して Open SSL をインストールします。
apt install openssl
認証局では、他の証明書の署名および失効リストの管理を実施する必要があります。 ここでは、管理のためのディレクトリを生成します。
どこに置いても良いですが、ここでは、 /var/lib/ssl/ca に置くものとします。
mkdir -p /var/lib/ssl/ca/{certs,crl,newcerts,private,conf}
chmod 700 /var/lib/ssl/ca/private
touch /var/lib/ssl/ca/index.txt
echo 01 > /var/lib/ssl/ca/serial
echo 00 > /var/lib/ssl/ca/crlnumber
[ '''セクション名''' ] '''key''' = '''value'''
デフォルトの CAの設定を記述するセクション。 default_ca のキーワードにより、サブセクションを指定し、 実際の設定は、サブセクション内に記述される。
[ ca ] default_ca = CA_default
[ CA_default ]
: : :
key | 説明 | デフォルト値 |
default_ca | CAの設定を記述するサブセクションを指定する。 | CA_default |
dir (※1) | CAの各種ファイルを置くディレクトリを指定する。 | ./demoCA |
certs | 発行した証明書を格納するディレクトリ。 | $dir/certs |
crl_dir | 失効した信頼できない証明書のリストを格納するディレクトリ。 | $dir/crl |
database | 署名した証明書を管理するデータベースのインデックスファイル | $dir/index.txt |
new_certs_dir | 新規証明書を格納するディレクトリ | $dir/new_certs_dir |
certificate | CA証明書。署名等の際に参照される。 | $dir/cacert.pem |
serial | 署名した証明書の署名シリアル番号を記載したファイル。 | $dir/serial |
crlnumber | 失効リスト用のシリアル番号を記載したファイル | $dir/crlnumber |
crl | CRLファイル。 | $dir/crl.pem |
private_key | 秘密鍵。 | $dir/private/prikey.pem |
RANDFILE | 乱数生成に用いるファイル。 | $dir/private/.rand |
name_opt | サブジェクト名オブジェクト | ca_default |
cert_ope | 証明書フィールドオプションを指定する。 | ca_default |
default_days | デフォルトの証明書有効期間(日数) | 365 |
default_crl_days | デフォルトの次のCRL更新までの日数 | 30 |
default_md | デフォルトのメッセージダイジェスト方式 | sha256 |
※1) 予約されたキーワードではなく、設定ファイルの中で利用している変数となる。
new_certs_dir = $dir/newcerts
CA証明書ファイル
例) certificate = $dir/cacert.pem
以下、修正中。 /etc/ssl/openssl.cnf ファイルを /var/lib/ssl/ 配下にコピーし、 次の点を修正します。
[ CA_default ] # <変更> 出力先ディレクトリを変更 #* dir = ./demoCA # Where everything is kept dir = ca
# For the CA policy [ policy_match ] countryName = match stateOrProvinceName = optional # <変更> match -> optional organizationName = optional organizationalUnitName = optional # <変更> match -> optional commonName = supplied emailAddress = optional # # [備考] # match : 当該項目がCAと同じであること # supplied : 当該項目が設定されていること # optional : 当該項目の設定有無、一致不一致を問わない
# ルート認証局 CA証明書用 [ cert_rootca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer crlDistributionPoints = URI:<CRLファイルがあるURL> basicConstraints = critical,CA:TRUE keyUsage = critical,digitalSignature,cRLSign,keyCertSign # 中間(末端)認証局 CA証明書用 [ cert_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer subjectAltName = DNS.1:<ドメイン名> extendedKeyUsage = serverAuth,clientAuth,emailProtection,codeSigning crlDistributionPoints = URI:<CRLファイルがあるURL> authorityInfoAccess = caIssuers;URI:<CA証明書があるURL> basicConstraints = critical,CA:TRUE,pathlen: 0 keyUsage = critical,digitalSignature,cRLSign,keyCertSig # サーバー証明書用 [ cert_server ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer subjectAltName = DNS.1:<ドメイン名> extendedKeyUsage = serverAuth, clientAuth basicConstraints = CA:FALSE keyUsage = digitalSignature,keyEncipherment # クライアント証明書用 [ cert_client ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer subjectAltName = DNS.1:<ドメイン名> extendedKeyUsage = clientAuth basicConstraints = CA:FALSE keyUsage = digitalSignature,keyEncipherment
例) keyid:always,issuer 必ず親証明書のサブジェクトキー識別子をコピーし、 可能であれば、発行者証明者から発行者とシリアル番号をコピーする。
例) subjectAltName=email:sample@ehobby.jp,RID:1.2.3.4DNS名などで複数指定する場合は、次のような方法で可能
方法1) subjectAltName=@alt_names [ alt_names ] DNS.1 = ehobby.jp DNS.2 = *.ehobby.jp 方法2) subjectAltName=DNS.1:ehobby.jp,DNS.2:*.ehobby.jp
例1) OSCPサーバー authorityInfoAccess = OSCP; URI:http://ehobby.jp/oscp/ 例2) 証明書情報 authorityInfoAccess = caIssuers; URI:http://ehobby.jp/ca/rootca.crt
例1) ルート認証局の場合 basicConstraints = critical,CA:TRUE 例2) 末端認証局の場合 (認証局に対して署名不可) basicConstraints = critical,CA:TRUE,pathlen:0 例3) サーバー証明書, クライアント証明書の場合 basicConstraints = CA:FALSE
※その他、設定ファイルの詳細は、man v509v3_config を参照ください。