環境構築

Open SSL のインストール

次のコマンドを入力して Open SSL をインストールします。

apt install openssl

認証局の環境構築

認証局では、他の証明書の署名および失効リストの管理を実施する必要があります。 ここでは、管理のためのディレクトリを生成します。

どこに置いても良いですが、ここでは、 /var/lib/ssl/ca に置くものとします。

  1. 必要なディレクトリ作成します。
    mkdir -p /var/lib/ssl/ca/{certs,crl,newcerts,private,conf}
  2. 権限を設定します。
    chmod 700 /var/lib/ssl/ca/private
  3. 証明書のインデックス管理用ファイルを作成します。
    touch /var/lib/ssl/ca/index.txt
  4. 証明書のシリアル番号管理ファイルを作成します。
    echo 01 > /var/lib/ssl/ca/serial
  5. 失効リスト番号管理ファイルを作成します。
    echo 00 > /var/lib/ssl/ca/crlnumber
    

認証局の openssl.cnf 作成

  1. fileopenssl.cnf を /var/lib/ssl/ca/conf/ 配下にコピーし、適宜必要な設定を修正します。 ※/etc/ssl/openssl.cnf をベースに修正しても構いません。 ※各設定項目については、以下を参照。

openssl.cnf 設定

openssl.cnf の設定を記します。

####################################################################
##
## <全体>
## 指定可能なメッセージダイジェストは、
## openssl dgst -h コマンドにてご確認ください。
##
####################################################################
##
## CA セクション
##
## default_ca により、CA 設定を記載しているセクションを指定します。
[ ca ]
default_ca      = CA_default                # CA設定を記載しているセクション



####################################################################
##
## CA_default セクション
##
## CA の設定を記載しているセクション
##
[ CA_default ]
# 以下、認証局における証明書や各種ファイルを置く場所を設定します。
dir             = .                         # 基本ディレクトリ(予約キーワードではなく、変数となります。)
certs           = $dir/certs                # 発行した証明書格納ディレクトリ
crl_dir         = $dir/crl                  # CRL格納ディレクトリ
database        = $dir/index.txt            # データベースインデックス
new_certs_dir   = $dir/newcerts             # 新規作成証明書格納ディレクトリ

certificate     = $dir/cacert.pem           # CA証明書
serial          = $dir/serial               # シリアル番号ファイル
crlnumber       = $dir/crlnumber            # CRL番号ファイル
crl             = $dir/crl.pem              # CRLファイル
private_key     = $dir/private/prikey.pem   # 秘密鍵
RANDFILE        = $dir/private/.rand        # ランダムファイル

x509_extensions = usr_cert                  # 証明書の拡張セクション

# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt        = ca_default                # サブジェクト名オプション
cert_opt        = ca_default                # 証明書フィールドオプション

default_days    = 365                       # 証明書有効期間(日数)
default_crl_days= 30                        # 次のCRL更新までの日数
default_md      = sha256                    # ダイジェストアルゴリズム
preserve        = no                        # keep passed DN ordering



####################################################################
##
## ★署名時のポリシーセクション
##
## 各情報に対して次の値を指定可能であり、条件を満たさない
## CSR の場合、署名が失敗します。
##
## match    : 当該項目がCAと同じであること
## supplied : 当該項目が設定されていること
## optional : 当該項目の設定有無、一致不一致を問わない
[ policy_match ]
countryName             = match
stateOrProvinceName     = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional



####################################################################
##
## CSR作成時に関する設定を記載するセクション
##
## ★メッセージダイジェストは、デフォルト sha1 となっておりますが、
## 強度の問題より sha256 とすべきです。
##
[ req ]
default_bits            = 2048          # ビット数
default_md              = sha256        # メッセージダイジェスト
default_keyfile         = privkey.pem   # 秘密鍵
distinguished_name      = req_distinguished_name
attributes              = req_attributes
x509_extensions         = v3_ca         # 自己署名の拡張

# 文字種別
# 次の指定が可能です。
# default: PrintableString, T61String, BMPString.
# pkix   : PrintableString, BMPString (PKIX recommendation before 2004)
# utf8only: only UTF8Strings (PKIX recommendation after 2004).
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
# MASK:XXXX a literal mask value.
# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings.
string_mask = utf8only



####################################################################
##
## 情報指定時の問い合わせメッセージ、デフォルト値、制限などを
## 設定するセクション
##
[ req_distinguished_name ]
countryName             = 国名 (2文字コード)    # 国名 (2文字のコード)
countryName_default     = JP
countryName_min         = 2
countryName_max         = 2

stateOrProvinceName     = 都道府県名
stateOrProvinceName_default = Hyogo

localityName            = 市町村名
localityName_default    = Amagasaki

0.organizationName      = 組織名
0.organizationName_default  = Ehobby

# 複数指定の場合
#1.organizationName     = 第二組織名
#1.organizationName_default = World Wide Web Pty Ltd

organizationalUnitName  = 部門名
#organizationalUnitName_default =

commonName              = コモンネーム(名前, サーバーホスト名など)
commonName_max          = 64

emailAddress            = Eメールアドレス
emailAddress_max        = 64

# SET-ex3           = SET extension number 3

[ req_attributes ]
challengePassword       = パスワード [8-20文字]
challengePassword_min   = 8
challengePassword_max   = 20

unstructuredName        = オプション国名



####################################################################
##
## CA が 証明書署名要求に署名する際に追加されるセクション
##
[ usr_cert ]

# 証明書が CA 用か否かを指定する。
# エンドユーザーの証明書は、CAではないため、
# CA:FALSE を指定する。
basicConstraints        = CA:FALSE

# サブジェクトキー識別子指定する。
# hash 固定。(16進数文字列も指定可能であるが非推奨)
subjectKeyIdentifier    = hash

# keyid  : サブジェクトキーを親からコピーする。
# issuer : 発行者証明書から発行者とシリアル番号をコピーする。
# それぞれ、always (Ex. keyid:always) を指定可能であり、
# always は、コピーを強制する。
authorityKeyIdentifier  = keyid,issuer



####################################################################
##
## 自己署名の拡張 [ルート認証局用 CA証明書 署名用]
##
[ v3_ca ]

# サブジェクトキー識別子指定する。
# hash 固定。(16進数文字列も指定可能であるが非推奨)
subjectKeyIdentifier    = hash

# keyid  : サブジェクトキーを親からコピーする。
# issuer : 発行者証明書から発行者とシリアル番号をコピーする。
# それぞれ、always (Ex. keyid:always) を指定可能であり、
# always は、コピーを強制する。
authorityKeyIdentifier  = keyid:always,issuer

# 証明書が CA 用か否かを指定する。
# CA の場合のPKIX の推奨指定は、次の通り。
#
# critical,CA:TRUE
#
# ※上記指定の場合、いくつかのソフトウェアは動作しない場合がある。
#   その時は、critical, を除去すること。
basicConstraints        = critical,CA:true

# 鍵の用途を指定する。
# 次の指定が可能。
#  digitalSignature    電子署名
#  nonRepudiation      否認防止
#  keyEncipherment     鍵暗号
#  dataEncipherment    データ暗号
#  keyAgreement        鍵交換
#  keyCertSign         電子証明書の検証
#  cRLSign             CRLの署名検証
#  encipherOnly        鍵交換時のデータ暗号用
#  decipherOnly        鍵交換時のデータ複合用
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

署名拡張用設定詳細

※その他、設定ファイルの詳細は、man v509v3_config を参照ください。


トップ   一覧 検索 最終更新   ヘルプ   最終更新のRSS