環境構築

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 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証明書 署名用]
##
## 用途なども指定可能ですが、通常、ルート証明書は
## あまり細かい指定はせずに、利用する側で、
## 用途の設定、EVのOID設定などを実施します。
##
[ 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

署名に必要な設定 (認証局署名:openssl_ca.cnf)

####################################################################
##
## 中間認証局 CA証明書 署名用
##
[ sign_ca ]
#
# subjectKeyIdentifier
#   サブジェクトキー識別子。hash を指定する。
#   ※16進数文字列してもあるが、非推奨
subjectKeyIdentifier    = hash
#
#
# authorityKeyIdentifier
#   keyid  : サブジェクトキー識別子を親証明書からコピーする。
#   issuer : 発行者証明書から発行者とシリアル番号をコピーする。
#   keyid:always, issuer:always のように、always を指定すると、
#   常にその値のコピーを強制し、コピーできない場合はエラーとなる。
authorityKeyIdentifier  = keyid:always,issuer
#
#
# extendedKeyUsage
#   証明書公開鍵を使用できる目的を示す用法リスト
#   次の値を指定可能である。
#   - serverAuth      : SSL/TLS Webサーバー認証
#   - clientAuth      : SSL/TLS Webクライアント認証
#   - codeSigning     : コード署名
#   - emailProtection : 電子メール保護 (S/MIMEなど)
#   - timeStamping    : 信頼できるタイムスタンプ
#   - msSGC           : Microsoft Server Gated Crypto
#   - nsSGC           : Netscape Server Gated Crypto
#   - msSmartcardLogin: Microsoft Smartcardlogin
extendedKeyUsage        = serverAuth,clientAuth,emailProtection,codeSigning
#
#
# CA証明書か否かを表す。
# CA証明書の場合は、critical,CA:TRUE を指定する。
basicConstraints        = critical,CA:TRUE,pathlen: 0
keyUsage                = critical,digitalSignature,cRLSign,keyCertSign
crlDistributionPoints   = URI: http://ehobby.jp/ca/latestcrl.crl

# @xxx は、指定セクションを参照する。
certificatePolicies     = @policies, @cps
authorityInfoAccess     = @info_access

[ policies ]
# 通常、サーバー証明書の場合、ドメイン検証を指定します。
policyIdentifier       = 2.23.140.1.2.1    # ドメイン検証
#-P2 policyIdentifier       = 2.23.140.1.2.2    # 組織検証
#-P3 policyIdentifier       = 2.23.140.1.2.3    # 個別検証

[ info_access ]
# 通常、caIssuers には、証明書の URL を指定します。
# 通常、CPS には、認証実施規定("CPS")文書 のURLを指定します。
# ※ CPSの記述は、下記が参考になるかと思います。
# https://letsencrypt.org/documents/isrg-cps-v2.0/
caIssuers;URI.0         = http://ehobby.jp/ca/ca.crt
CPS.1                   = http://ehobby.jp/ca/

[ cps ]
#
# policyIdentifier      = <OIDを記載する>
# CPS.1                 = <CPSのURL>

署名に必要な設定 (サーバー証明書署名:openssl_server.cnf)

####################################################################
##
## サーバー証明書 署名用
##
[ sign_server ]
#
# subjectKeyIdentifier
#   サブジェクトキー識別子。hash を指定する。
#   ※16進数文字列してもあるが、非推奨
subjectKeyIdentifier    = hash
#
#
# authorityKeyIdentifier
#   keyid  : サブジェクトキー識別子を親証明書からコピーする。
#   issuer : 発行者証明書から発行者とシリアル番号をコピーする。
#   keyid:always, issuer:always のように、always を指定すると、
#   常にその値のコピーを強制し、コピーできない場合はエラーとなる。
authorityKeyIdentifier  = keyid,issuer
#
#
# subjectAltName
#   代替名。次のような値を指定可能。
#   ・DNS
#   ・email
#   ・URI
#   ・RID
#   ・IP
#   ・dirName
#   ・otherName
#   サーバー証明書の場合、DNS の指定が必要であり、Chrome では、
#   本指定が無ければ ERR_CERT_COMMON_NAME_INVALID のエラーがっ製する。
#
#   カンマ区切りあるいは、セクションを分けて複数指定することが可能である。
#
#   例1) カンマ区切りによる指定
#   subjectAltName=email:sample@ehobby.jp,RID:1.2.3.4
#
#   例2) 別セッションにて指定
#   subjectAltName=@alt_names
subjectAltName=@alt_names
#
#
# extendedKeyUsage
#   証明書公開鍵を使用できる目的を示す用法リスト 
#   次の値を指定可能である。
#   - serverAuth      : SSL/TLS Webサーバー認証
#   - clientAuth      : SSL/TLS Webクライアント認証
#   - codeSigning     : コード署名
#   - emailProtection : 電子メール保護 (S/MIMEなど)
#   - timeStamping    : 信頼できるタイムスタンプ
#   - msSGC           : Microsoft Server Gated Crypto
#   - nsSGC           : Netscape Server Gated Crypto
#   - msSmartcardLogin: Microsoft Smartcardlogin
extendedKeyUsage        = serverAuth,clientAuth
#
#
# CA証明書か否かを表す。
# CA証明書の場合は、critical,CA:TRUE を指定する。
basicConstraints        = critical,CA:FALSE
keyUsage                = critical,digitalSignature,keyEncipherment
crlDistributionPoints   = URI: http://ehobby.jp/ca/latestcrl.crl
# @xxx は、指定セクションを参照する。
certificatePolicies     = @policies, @cps
authorityInfoAccess     = @info_access

[ policies ]
# 通常、サーバー証明書の場合、ドメイン検証を指定します。
policyIdentifier       = 2.23.140.1.2.1    # ドメイン検証
#-P2 policyIdentifier       = 2.23.140.1.2.2    # 組織検証
#-P3 policyIdentifier       = 2.23.140.1.2.3    # 個別検証

[ info_access ]
# 通常、caIssuers には、証明書の URL を指定します。
# 通常、CPS には、認証実施規定("CPS")文書 のURLを指定します。
# ※ CPSの記述は、下記が参考になるかと思います。
# https://letsencrypt.org/documents/isrg-cps-v2.0/
caIssuers;URI.0         = http://ehobby.jp/ca/ca.crt
CPS.1                   = http://ehobby.jp/ca/

[ cps ]
#
# policyIdentifier      = <OIDを記載する>
# CPS.1                 = <CPSのURL>

[ alt_names ]
# ドメイン名指定
# 複数指定可能。
DNS.1                   = ehobby.jp
DNS.2                   = *.ehobby.jp

署名に必要な設定 (クライアント証明書署名:openssl_client.cnf)

####################################################################
##
## クライアント証明書 署名用
##
[ sign_server ]
#
# subjectKeyIdentifier
#   サブジェクトキー識別子。hash を指定する。
#   ※16進数文字列してもあるが、非推奨
subjectKeyIdentifier    = hash
#
#
# authorityKeyIdentifier
#   keyid  : サブジェクトキー識別子を親証明書からコピーする。
#   issuer : 発行者証明書から発行者とシリアル番号をコピーする。
#   keyid:always, issuer:always のように、always を指定すると、
#   常にその値のコピーを強制し、コピーできない場合はエラーとなる。
authorityKeyIdentifier  = keyid,issuer
#
#
# extendedKeyUsage
#   証明書公開鍵を使用できる目的を示す用法リスト 
#   次の値を指定可能である。
#   - serverAuth      : SSL/TLS Webサーバー認証
#   - clientAuth      : SSL/TLS Webクライアント認証
#   - codeSigning     : コード署名
#   - emailProtection : 電子メール保護 (S/MIMEなど)
#   - timeStamping    : 信頼できるタイムスタンプ
#   - msSGC           : Microsoft Server Gated Crypto
#   - nsSGC           : Netscape Server Gated Crypto
#   - msSmartcardLogin: Microsoft Smartcardlogin
extendedKeyUsage        = clientAuth
#
#
# CA証明書か否かを表す。
# CA証明書の場合は、critical,CA:TRUE を指定する。
basicConstraints        = critical,CA:FALSE
keyUsage                = critical,digitalSignature,keyEncipherment
crlDistributionPoints   = URI: http://ehobby.jp/ca/latestcrl.crl
# @xxx は、指定セクションを参照する。
certificatePolicies     = @policies, @cps
authorityInfoAccess     = @info_access

[ policies ]
# 通常、サーバー証明書の場合、ドメイン検証を指定します。
policyIdentifier       = 2.23.140.1.2.1    # ドメイン検証
#-P2 policyIdentifier       = 2.23.140.1.2.2    # 組織検証
#-P3 policyIdentifier       = 2.23.140.1.2.3    # 個別検証

[ info_access ]
# 通常、caIssuers には、証明書の URL を指定します。
# 通常、CPS には、認証実施規定("CPS")文書 のURLを指定します。
# ※ CPSの記述は、下記が参考になるかと思います。
# https://letsencrypt.org/documents/isrg-cps-v2.0/
caIssuers;URI.0         = http://ehobby.jp/ca/ca.crt
CPS.1                   = http://ehobby.jp/ca/

[ cps ]
#
# policyIdentifier      = <OIDを記載する>
# CPS.1                 = <CPSのURL>

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



添付ファイル: fileopenssl.cnf 627件 [詳細]
トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS