ルートCA(ルート認証局)設置とサーバ証明書の作り方

ちまたで言われている、オレオレ認証局の設置、オレオレ証明書の作り方。

環境

Windows10 pro 64bit
OpenSSL 3.0.0 7 sep 2021
認証局を設置するフォルダは「C:\server\PicosyCA」とする

※今回つくる 「C:\server\PicosyCA」 の中の構成や、設定ファイルなどはあくまでテスト用。
 実際に使用する際は環境などにあわせて修正すること。

OpenSSL のダウンロードとインストール

OpenSSL の公式ページの方からはソースファイルでしかダウンロードできないようだったので
Shining Light Productions のページからインストーラ版をダウンロードして使用する。

ダウンロード

Shining Light Productions のページにアクセスして、上部メニューの「Products」をクリック。

open-ssl-Shining-Light-Productions-click-Products

「Win32/Win64 OpenSSL」をクリック。

open-ssl-Shining-Light-Productions-click-win64

Download Win32/Win64 OpenSSL 項目の「Win64 OpenSSL v3.0.0 Light の MSI」版をダウンロードする。

open-ssl-Shining-Light-Productions-download

インストール

ダウンロードした Win64OpenSSL_Light-3_0_0.msi を実行する。
あとは流れに沿ってインストールする。

インストール先は「C:\OpenSSL-Win64」
DLLはインストール先の bin フォルダの中
最後の寄付するかどうかの部分では全チェックをはずした

open-ssl-install-donate

インストールできたら「C:\OpenSSL-Win64\bin」へのパスを通しておく。パスの通し方は以下を参照。

Windows10 環境変数ウィンドウの開き方「Path」設定例

パスが通せたかの確認は C:\OpenSSL-Win64\bin 以外のカレントフォルダにしたコマンドプロンプトで「openssl version」を実行しバージョン情報が出力されるかを確認する。

C:>openssl version
OpenSSL 3.0.0 7 sep 2021 (Library: OpenSSL 3.0.0 7 sep 2021)

認証局(CA)設置の前準備

以下の用にフォルダとファイルを作っておく。

C:\server\PicosyCA フォルダ(CA設置フォルダ)
 ├ PicosyCA_RandSeed.txt 適当な中身のテキストファイル。ランダム値を作るのに使う。
 ├ PicosyJpCertificate_RandSeed.txt 適当な中身のテキストファイル。ランダム値を作るのに使う。
 ├ PicosyCA.cfg設定ファイル。中身は後述。
 ├  PicosyJpCertificate.cfg設定ファイル。中身は後述。
 ├  _certs フォルダ
 ├  _crl フォルダ
    ┝ crlnumber.txt 00[改行]だけのテキストファイル。 失効証明書ID用。
 ├  _newcerts フォルダ(認証局が署名した新しい証明書(ID.pem))の保管場所
 └ _database フォルダ
    ├ databaseIndex.txt 空のテキストファイル
    └ Serial.txt00[改行]だけのテキストファイル。
認証局が署名する次の証明書IDを半角英数2桁で書いておく。

今回使用した「 PicosyCA.cfg 」の設定。必要な個所は書き換える必要がある。参考にある程度コメントで説明が書いてある。

####################################################################
# CAの設定
####################################################################
[ ca ]
default_ca                     = CA_default                         # 使用するデフォルトを指定


####################################################################
# デフォルトCAの設定
####################################################################
[ CA_default ]

dir                            = C:/server/PicosyCA                 # ホームディレクトリ

new_certs_dir                  = $dir/_newcerts                     # 新規に発行した証明書保管用。証明書のファイル名は「.pem」(nnは通番)
certs                          = $dir/_certs                        # 証明書保管用
database                       = $dir/_database/databaseIndex.txt   # newcertsディレクトリ内に保管される証明書の通番(nn)と識別名DN(Distinguished Name)との対応表

crl_dir                        = $dir/_crl                          # 失効リスト(Certificate Revocation List)保管用
crlnumber                      = $dir/_crl/crlnumber.txt            # the current crl number
crl                            = $dir/_crl.crl                      # The current CRL

private_key                    = $dir/PicosyCA_Secret.key           # CA秘密鍵
RANDFILE                       = $dir/PicosyCA_Rand.dat             # CA秘密鍵の作成に使用するランダム値
certificate                    = $dir/PicosyCA.crt                  # CA証明書
serial                         = $dir/_database/Serial.txt          # 次に発行する証明書の通番(nn)

unique_subject                 = yes                                # index.txtにて管理する通番に重複を許すかどうかの設定。yes = 重複を許さない(デフォルト)

default_days                   = 365                                # サーバ/クライアントの認証期間
default_crl_days               = 3650                               # CA自体の認証期間はこっち
default_md                     = sha512                             # 証明書の署名に使用するアルゴリズム
                                                                    # コマンドのオプション「-md」で、設定ファイルの値とは異なるものを指定することができます。

name_opt                       = ca_default                         # Subject Name options
cert_opt                       = ca_default                         # Certificate field options
# copy_extensions              = copy                               # Extension copying option: use with caution.
# crl_extensions               = crl_ext                            # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
                                                                    # so this is commented out by default to leave a V1 CRL.
                                                                    # crlnumber must also be commented out to leave a V1 CRL.
preserve                       = no                                 # keep passed DN ordering

policy                         = policy_match                       # 使用するポリシーを指定

####################################################################
# ポリシー
# match     CAの内容と一致しなければならない
# optional  無くてもよい
# supplied  なければならない
####################################################################
[ policy_match ]
countryName                    = match                              # 国名
stateOrProvinceName            = optional                           # 都道府県名
organizationName               = supplied                           # 組織名
organizationalUnitName         = optional                           # 部門名
commonName                     = supplied                           # SSL暗号化通信を行うサイトのURLのうち、サブドメインまでを含んだドメイン部分 (www.ドメイン, ftp.ドメイン, *.ドメインなど)
emailAddress                   = optional                           # メールアドレス


####################################################################
# 証明書要求(CSR)の際の設定
####################################################################
[ req ]
default_bits                   = 4096                               # ビット数(デフォルト
default_md                     = sha512                             # アルゴリズム(デフォルト)
string_mask                    = utf8only                           # 文字コード(デフォルト)
distinguished_name             = req_distinguished_ca               # 使用する設定を指定
attributes                     = req_attributes_ca                  # 使用する設定を指定
x509_extensions                = v3_ca                              # 使用する設定を指定

####################################################################
[ req_attributes_ca ]
#challengePassword             = A challenge password               # 証明書を破棄するときに必要になるパスワード(自己署名の場合は無効)
#challengePassword_min         = 4                                  # ルートCAの証明書は自己署名となるため【使用しません】
#challengePassword_max         = 20                                 # 
#unstructuredName              = An optional company name           # 証明書の非公式名 オプションの会社名 などいろいろっぽい【使用しない】

####################################################################
[ req_distinguished_ca ]
countryName                    = 【国名(半角2文字)】               # 国名
countryName_default            = JP                                 # デフォルト値
countryName_min                = 2                                  # 最小文字数
countryName_max                = 2                                  # 最大文字数

stateOrProvinceName            = 【都道府県名   】               # 都道府県名
stateOrProvinceName_default    =  Tokyo City                        # デフォルト値

localityName                   = 【区市町村    】               # 区市町村
localityName_default           =                                    # 区市町村

0.organizationName             = 【組織名     】               # 組織名
0.organizationName_default     = PicosyCA                           # デフォルト値

organizationalUnitName         = 【部門名     】               # 部門名
organizationalUnitName_default =                                    # デフォルト値【省略可能】

commonName                     = 【ドメイン    】               # ドメイン、www.ドメイン、*.ドメインなど
commonName_max                 = 64                                 # 最大文字数
commonName_default             = PicosyCA

emailAddress                   = 【メールアドレス 】               # メールアドレス
emailAddress_max               = 64                                 # 最大文字数
emailAddress_default           =                                    # メールアドレス【省略可能】

####################################################################
[ v3_ca ]
keyUsage                       = critical, cRLSign, keyCertSign     # 用途 CAの場合の設定 
                                                                    # KeyUsageは、9ビットのデータで表されます。そして、各ビットがその利用方法を示しています。
                                                                    # Digital Signature (0) 電子署名               : 署名や認証 SSL/TLS、PKCS#7、XMLSignatureなど
                                                                    # Non Repudiation   (1) 否認防止               : 否認防止を伴う署名 主体者以外が私有鍵のバックアップを持っている場合、これを指定してはいけない
                                                                    # Key Encipherment  (2) 鍵暗号                 : 鍵の暗号化 SSL/TLSやS/MIME暗号では、データを暗号化する共通鍵を公開鍵で暗号化する仕組み。
                                                                    # Data Encipherment (3) データ暗号             : 実質的に使用せず
                                                                    # Key Agreement     (4) 鍵交換                 : 鍵合意DHなどに用いる
                                                                    # Key Cert Sign     (5) 電子証明書の検証       : 証明書への署名(認証局のみ)
                                                                    # CRL Sign          (6) CRLの署名検証          : CRL発行
                                                                    # Encipher Only     (7) 鍵交換時のデータ暗号用 : 実質的に使用せず
                                                                    # Decipher Only     (8) 鍵交換時のデータ復号用 : 実質的に使用せず

                                                                    # 鍵用途(Key Usage)
                                                                    # 証明書によって署名された鍵の利用法を示します。
                                                                    # 付加しても付加しなくても構いませんが、
                                                                    # 自己署名証明書に付加する場合は、
                                                                    # 「証明書の署名検証(keyCertSign)」及び「CRLの署名検証(cRLSign)」をチェックしてください。
                                                                    # このエクステンションは、クリティカルに指定してください(SHOULD)。
                                                                    # cRLSign : 「証明書失効リスト(CRL)の検証」
                                                                    # keyCertSign : 「鍵署名」
                                                                    
                                                                    # critical
                                                                    # 電子証明書には、その鍵の利用方法が記載されています。
                                                                    # この項目は、必須項目ではありませんが多くの電子証明書にKeyUsage として記載されています。
                                                                    # KeyUsageは、電子証明書が証明している鍵がどのような用途に使用されるかを指定しています。
                                                                    # KeyUsageを重要(Critical)と指定された場合は、指定された用途以外で使用してはいけないことを示しています。
                                                                    # 言い方を変えますと、重要(Critical)と指定されていなければ、この項目を確認する必要はありませんが、
                                                                    # 重要(Critical)と指定されていた場合は必ず確認しなければなりません。
                                                                    # この「確認」は、電子証明書の利用者に義務付けられています。
                                                                    # そのため多くの場合は、アプリケーションがその「確認機構」を実装しています。
                                                                    # しかし、その機能を実装することは、必須ではありません。

extendedKeyUsage        = critical,timeStamping,serverAuth,clientAuth,codeSigning,codeSigning,emailProtection
                                                                    #(拡張キー使用法) serverAuth(サーバ認証)、clientAuth(クライアント認証)、
                                                                    # codeSigning(コード署名)、emailProtection(S/MIMEなど)、
                                                                    # timeStamping(タイムスタンプ)などの組み合わせ


nsCertType              = sslCA, emailCA, objCA                     # 値:client server email objsign reserved sslCA emailCA objCA
                                                                    # サーバ証明書例 nsCertType = server
                                                                    # クライアント証明書例 nsCertType = client, email, objsign
                                                                    # CA例 nsCertType = sslCA, emailCA


nsComment               = "Picosy Root CA"                          # コメント

basicConstraints        = critical,CA:true                          # 基本制約(Basic Constraints)
                                                                    # 証明書のサブジェクト(つまり認証局自身)が、
                                                                    # 認証局であることを示すために付加します(MUST)。
                                                                    # その際、必ずクリティカルに指定してください(MUST)。
                                                                    # critical,CA:true,pathlen:1 とすると
                                                                    # サーバー証明書までの中に一つ中間CAの署名があっても問題ないってことだ。
                                                                    # 証明書チェーンの中でpathlenが0のCA証明書の次はサーバー証明書じゃないといけない。

subjectKeyIdentifier    = hash                                      # 所有者鍵識別子(Subject Key Identifier)
                                                                    # 証明書所有者が、複数の秘密鍵を所有している場合、
                                                                    # 証明書中で認証される公開鍵を識別するために使います。
                                                                    # 認証局証明書の場合、付加する必要があります(MUST)。
                                                                    # "hash" 公開鍵のハッシュ値を埋め込む

authorityKeyIdentifier  = keyid:always,issuer:always                # 認証局鍵識別子(Authority Key Identifier)
                                                                    # 証明書の検証時に、認証局の公開鍵を識別するために付加します。
                                                                    # 例えば、鍵更新時などの有効な鍵が複数ある場合に、鍵の区別がしやすくなります。
                                                                    # 自己署名証明書の場合は、付加しなくても構いません。
                                                                    # もし付加する場合、通常は「鍵識別子を設定する」を選択してください。


今回使用した「 PicosyJpCertificate.cfg 」の設定 。 必要な個所は書き換える必要がある。参考にある程度コメントで説明が書いてある。
subjectAltName - SANs の★部分は環境にあわせて書きかえる事。今回はテストを兼ねて
localhost、PCのIP、PCの名前 x 無印、www.、*. の9種類を記載している。
しっかりとしたドメインなどにすれば普通に使えると思う。

####################################################################
# CAの設定
####################################################################
[ ca ]
default_ca                     = CA_default                         # 使用するデフォルトを指定


####################################################################
# デフォルトCAの設定
####################################################################
[ CA_default ]

dir                            = C:/server/PicosyCA                 # ホームディレクトリ

new_certs_dir                  = $dir/_newcerts                     # 新規に発行した証明書保管用。証明書のファイル名は「.pem」(nnは通番)
certs                          = $dir/_certs                        # 証明書保管用
database                       = $dir/_database/databaseIndex.txt   # newcertsディレクトリ内に保管される証明書の通番(nn)と識別名DN(Distinguished Name)との対応表

crl_dir                        = $dir/_crl                          # 失効リスト(Certificate Revocation List)保管用
crlnumber                      = $dir/_crl/crlnumber.txt            # the current crl number
crl                            = $dir/_crl.crl                      # The current CRL

private_key                    = $dir/PicosyCA_Secret.key           # CA秘密鍵
RANDFILE                       = $dir/PicosyCA_Rand.dat             # CA秘密鍵の作成に使用するランダム値
certificate                    = $dir/PicosyCA.crt                  # CA証明書
serial                         = $dir/_database/Serial.txt          # 次に発行する証明書の通番(nn)

unique_subject                 = yes                                # index.txtにて管理する通番に重複を許すかどうかの設定。yes = 重複を許さない(デフォルト)

default_days                   = 365                                # サーバ/クライアントの認証期間
default_crl_days               = 3650                               # CA自体の認証期間はこっち
default_md                     = sha512                             # 証明書の署名に使用するアルゴリズム
                                                                    # コマンドのオプション「-md」で、設定ファイルの値とは異なるものを指定することができます。

name_opt                       = ca_default                         # Subject Name options
cert_opt                       = ca_default                         # Certificate field options
# copy_extensions              = copy                               # Extension copying option: use with caution.
# crl_extensions               = crl_ext                            # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
                                                                    # so this is commented out by default to leave a V1 CRL.
                                                                    # crlnumber must also be commented out to leave a V1 CRL.
preserve                       = no                                 # keep passed DN ordering

policy                         = policy_match                       # 使用するポリシーを指定

x509_extensions                = v3_server                          # 使用する設定を指定

####################################################################
# ポリシー
# match     CAの内容と一致しなければならない
# optional  無くてもよい
# supplied  なければならない
####################################################################
[ policy_match ]
countryName                    = match                              # 国名
stateOrProvinceName            = optional                           # 都道府県名
organizationName               = supplied                           # 組織名
organizationalUnitName         = optional                           # 部門名
commonName                     = supplied                           # SSL暗号化通信を行うサイトのURLのうち、サブドメインまでを含んだドメイン部分 (www.ドメイン, ftp.ドメイン, *.ドメインなど)
emailAddress                   = optional                           # メールアドレス



####################################################################
# 証明書要求(CSR)の際の設定
####################################################################
[ req ]
default_bits                   = 4096                               # ビット数(デフォルト
default_md                     = sha512                             # アルゴリズム(デフォルト)
string_mask                    = utf8only                           # 文字コード(デフォルト)
distinguished_name             = req_distinguished_server           # 使用する設定を指定
attributes                     = req_attributes_server              # 使用する設定を指定
x509_extensions                = v3_server                          # 使用する設定を指定

####################################################################
[ req_attributes_server ]
#challengePassword             = A challenge password               # 証明書を破棄するときに必要になるパスワード(自己署名の場合は無効)
#challengePassword_min         = 4                                  # ルートCAの証明書は自己署名となるため【使用しません】
#challengePassword_max         = 20                                 # 
#unstructuredName              = An optional company name           # 証明書の非公式名 オプションの会社名 などいろいろっぽい【使用しない】

####################################################################
[ req_distinguished_server ]
countryName                    = 【国名(半角2文字)】               # 国名
countryName_default            = JP                                 # デフォルト値
countryName_min                = 2                                  # 最小文字数
countryName_max                = 2                                  # 最大文字数

stateOrProvinceName            = 【都道府県名   】               # 都道府県名
stateOrProvinceName_default    = Tokyo City                         # デフォルト値

localityName                   = 【区市町村    】               # 区市町村
localityName_default           =                                    # 区市町村

0.organizationName		       = 【組織名     】               # 組織名
0.organizationName_default	   = Picosy                             # デフォルト値

organizationalUnitName         = 【部門名     】               # 部門名
organizationalUnitName_default =                                    # デフォルト値【省略可能】

commonName                     = 【ドメイン    】               # ドメイン、www.ドメイン、*.ドメインなど
commonName_max                 = 64                                 # 最大文字数
commonName_default             = localhost

emailAddress                   = 【メールアドレス 】               # メールアドレス
emailAddress_max               = 64                                 # 最大文字数
emailAddress_default           =                                    # メールアドレス【省略可能】


####################################################################
[ v3_server ]
#subjectAltName                = DNS:picosy.jp, DNS:www.picosy.jp
subjectAltName                 = DNS:*.★PCのIP, DNS:www.★PCのIP, DNS:★PCのIP, DNS:*.localhost, DNS:www.localhost, DNS:localhost, DNS:*.★PC名, DNS:www.★PC名, DNS:★PC名


basicConstraints               = CA:false                           # 基本制約(Basic Constraints)
                                                                    # 証明書のサブジェクト(つまり認証局自身)が、
                                                                    # 認証局であることを示すために付加します(MUST)。
                                                                    # その際、必ずクリティカルに指定してください(MUST)。

subjectKeyIdentifier           = hash                               # 所有者鍵識別子(Subject Key Identifier)
                                                                    # 証明書所有者が、複数の秘密鍵を所有している場合、
                                                                    # 証明書中で認証される公開鍵を識別するために使います。
                                                                    # 認証局証明書の場合、付加する必要があります(MUST)。
                                                                    # "hash" 公開鍵のハッシュ値を埋め込む

authorityKeyIdentifier         = keyid,issuer                       # 認証局鍵識別子(Authority Key Identifier)
                                                                    # 証明書の検証時に、認証局の公開鍵を識別するために付加します。
                                                                    # 例えば、鍵更新時などの有効な鍵が複数ある場合に、鍵の区別がしやすくなります。
                                                                    # 自己署名証明書の場合は、付加しなくても構いません。
                                                                    # もし付加する場合、通常は「鍵識別子を設定する」を選択してください。

keyUsage                       = digitalSignature, keyEncipherment  # 用途 サーバ用の場合
                                                                    # KeyUsageは、9ビットのデータで表されます。そして、各ビットがその利用方法を示しています。
                                                                    # Digital Signature (0) 電子署名               : 署名や認証 SSL/TLS、PKCS#7、XMLSignatureなど
                                                                    # Non Repudiation   (1) 否認防止               : 否認防止を伴う署名 主体者以外が私有鍵のバックアップを持っている場合、これを指定してはいけない
                                                                    # Key Encipherment  (2) 鍵暗号                 : 鍵の暗号化 SSL/TLSやS/MIME暗号では、データを暗号化する共通鍵を公開鍵で暗号化する仕組み。
                                                                    # Data Encipherment (3) データ暗号             : 実質的に使用せず
                                                                    # Key Agreement     (4) 鍵交換                 : 鍵合意DHなどに用いる
                                                                    # Key Cert Sign     (5) 電子証明書の検証       : 証明書への署名(認証局のみ)
                                                                    # CRL Sign          (6) CRLの署名検証          : CRL発行
                                                                    # Encipher Only     (7) 鍵交換時のデータ暗号用 : 実質的に使用せず
                                                                    # Decipher Only     (8) 鍵交換時のデータ復号用 : 実質的に使用せず

                                                                    # 鍵用途(Key Usage)
                                                                    # 証明書によって署名された鍵の利用法を示します。
                                                                    # 付加しても付加しなくても構いませんが、
                                                                    # 自己署名証明書に付加する場合は、
                                                                    # 「証明書の署名検証(keyCertSign)」及び「CRLの署名検証(cRLSign)」をチェックしてください。
                                                                    # このエクステンションは、クリティカルに指定してください(SHOULD)。
                                                                    # cRLSign : 「証明書失効リスト(CRL)の検証」
                                                                    # keyCertSign : 「鍵署名」
                                                                    
                                                                    # critical
                                                                    # 電子証明書には、その鍵の利用方法が記載されています。
                                                                    # この項目は、必須項目ではありませんが多くの電子証明書にKeyUsage として記載されています。
                                                                    # KeyUsageは、電子証明書が証明している鍵がどのような用途に使用されるかを指定しています。
                                                                    # KeyUsageを重要(Critical)と指定された場合は、指定された用途以外で使用してはいけないことを示しています。
                                                                    # 言い方を変えますと、重要(Critical)と指定されていなければ、この項目を確認する必要はありませんが、
                                                                    # 重要(Critical)と指定されていた場合は必ず確認しなければなりません。
                                                                    # この「確認」は、電子証明書の利用者に義務付けられています。
                                                                    # そのため多くの場合は、アプリケーションがその「確認機構」を実装しています。
                                                                    # しかし、その機能を実装することは、必須ではありません。



extendedKeyUsage               = serverAuth,emailProtection         #(拡張キー使用法) serverAuth(サーバ認証)、clientAuth(クライアント認証)、
                                                                    # codeSigning(コード署名)、emailProtection(S/MIMEなど)、
                                                                    # timeStamping(タイムスタンプ)などの組み合わせ

nsCertType                     = server                             # 値:client server email objsign reserved sslCA emailCA objCA
                                                                    # サーバ証明書例 nsCertType = server
                                                                    # クライアント証明書例 nsCertType = client, email, objsign
                                                                    # CA例 nsCertType = sslCA, emailCA

nsComment                      = "Picosy JP"                        # コメント

認証局のルート証明書を作る

まず「C:\server\PicosyCA」でコマンドプロンプトを開く。

認証局の秘密鍵を作成

コマンドプロンプトで下記を実行
openssl sha512 PicosyCA_RandSeed.txt > PicosyCA_Rand.dat
openssl genrsa -rand PicosyCA_Rand.dat 4096 > PicosyCA_Secret.key

認証局のCSR(+公開鍵)作成

コマンドプロンプトで下記を実行
openssl req -new -config PicosyCA.cfg -key PicosyCA_Secret.key -out PicosyCA_Request.csr

認証局の証明書作成(自己署名)

コマンドプロンプトで下記を実行
openssl x509 -req -days 3650 -extfile PicosyCA.cfg -in PicosyCA_Request.csr -signkey PicosyCA_Secret.key -out PicosyCA.crt

サーバ証明書を作る

まず「C:\server\PicosyCA」でコマンドプロンプトを開く。

サーバ証明書の秘密鍵を作成

コマンドプロンプトで下記を実行
openssl sha512 PicosyJpCertificate_RandSeed.txt > PicosyJpCertificate_Rand.dat
openssl genrsa -rand PicosyJpCertificate_Rand.dat 4096 > PicosyJpCertificate_Secret.key

サーバ証明書のCSR(+公開鍵)作成

コマンドプロンプトで下記を実行
openssl req -new -config PicosyJpCertificate.cfg -key PicosyJpCertificate_Secret.key -out PicosyJpCertificate_Request.csr

サーバ証明書作成(CAに署名してもらう)

コマンドプロンプトで下記を実行
openssl ca -in PicosyJpCertificate_Request.csr -config PicosyJpCertificate.cfg -out PicosyJpCertificate.crt

認証局のルート証明書をインストールする

作成された「PicosyCA.crt」をダブルクリックすると証明書ウィンドウが開くので「証明書のインストール」から行う。

インストール先は、現在のユーザー or ローカルコンピューターを選んで、信頼されたルート証明機関 or サードパーティルート証明機関にする。

※アクセスする別PCがあるならそちらにもインストールする必要がある。

サーバ証明書の確認

「PicosyJpCertificate.crt」をダブルクリックして開く証明書ウィンドウの証明書のパスタブで認証局の証明書に関連づけられ問題ない事を確認する。

PicosyJpCertificate-check

サーバ証明書の更新

期限切れになった場合などの更新方法。

まず「C:\server\PicosyCA」でコマンドプロンプトを開く。

現在のサーバ証明書を一旦失効させる

コマンドプロンプトで下記を実行
openssl ca -gencrl -config PicosyJpCertificate.cfg -revoke PicosyJpCertificate.crt

サーバ証明書作成(CAに署名してもらう)

コマンドプロンプトで下記を実行
openssl ca -in PicosyJpCertificate_Request.csr -config PicosyJpCertificate.cfg -out PicosyJpCertificate.crt

その他 サーバ証明書をp12(pfx)形式へ変換する

自作アプリなどのSSLサーバアプリに組み込む場合に p12(pfx)形式(証明書+秘密鍵)への変換が必要になる場合があるのでその方法。

まず「C:\server\PicosyCA」でコマンドプロンプトを開く。

コマンドプロンプトで下記を実行(パスワードを設定している場合はそれが求められる)
openssl pkcs12 -export -inkey PicosyJpCertificate_Secret.key -in PicosyJpCertificate.crt -out PicosyJpCertificate.pfx

その他 ローカル環境のApacheでサーバ証明書をつかってみた結果

今回はテストで、SANs を localhost、PCのIP、PCの名前 x 無印、www.、*. で記載しているのでアクセスするURLの書き方によってどのようになるのか調べてみた。使用したブラウザは Google Chrome。

URL結果
https://localhostOK
https://www.ocalhostアクセス不可
https://PCのIPアクセス可能だが証明書エラー:ERR_CERT_COMMON_NAME_INVALID
https://www.PCのIPアクセス不可
https://PCの名前OK
https://www.PCの名前アクセス不可
同一PC上からアクセス した場合
URL結果
https://PCのIPアクセス可能だが証明書エラー:ERR_CERT_COMMON_NAME_INVALID
https://www.PCのIPアクセス不可
https://PCの名前OK
https://www.PCの名前アクセス不可
ローカルネットワーク上の別PCからアクセス した場合

という結果になった。

とりあえず、www.無しの localhost、 PCの名前でのアクセスは普通に可能だったのでローカル環境でテスト用として使うだけなら問題なさそう。