ここでは、次の証明書を生成・管理するための基本環境を構築します。
※少し設定を変更すれば、他の証明書も生成可能です。
次のコマンドを入力して Open SSL をインストールします。
apt install openssl
証明書に関する各種ファイルやディレクトリを作成します。 どこに置いても良いですが、ここでは、 /var/lib/ssl に置くものとします。
mkdir /var/lib/ssl cd /var/lib/ssl
# 0. 基本ディレクトリ指定 TARGET_DIR=ca # # 1. 必要なディレクトリ作成 mkdir -p ${TARGET_DIR}/{certs,crl,newcerts,private} # # 2. 権限を設定 chmod 700 ${TARGET_DIR}/private # # 3. 証明書のインデックス管理用ファイルを作成 touch ${TARGET_DIR}/index.txt # # 4. 証明書のシリアル番号管理ファイルを作成 echo 01 > ${TARGET_DIR}/serial # # 5. 失効リスト番号管理ファイルを作成 echo 00 > ${TARGET_DIR}/crlnumber
/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 を参照ください。