Linux・WindowsのOpensslでのオレオレ認証局作成 

スポンサーリンク

opensslのインストール

Windows: ダウンロードページ「OpenSSL Installer for Windows」

Linux:大体インストールしたら一緒にくっ付いてきてますが、無い場合は下記のコマンドでインストール
sudo apt-get install openssl    ・・・debian
sudo yum install openssl    ・・・CentOS

各証明書の確認コマンド

openssl req -text -noout -in CSR名  ・・・CSRの内容を確認

openssl rsa -text -noout -in 秘密鍵ファイル名  ・・・秘密鍵の中身を確認

openssl x509 -text -noout -in 証明書ファイル名  ・・・証明書の中身を確認

where openssl  ・・・WindowsでのopennsslのEXEファイルの場所確認

Windows CA認証局を作成する

各フォルダを作成します

コマンドプロンプトで下記のコマンドを実行
今回の例ではコマンドプロンプトの作業フォルダは「C:\CA-TEST」としています

cd "作成したいフォルダPath" 
mkdir CA\certs
mkdir CA\crl
mkdir CA\newcerts
mkdir CA\private
mkdir CA\csr
type nul > CA\index.txt
type nul > CA\crlnumber
echo 1001 > CA\serial

OpenSSL 設定ファイル

CA用に作成したフォルダ内に以下の内容を openssl.cfg というファイル名で作成

[ ca ]
default_ca    = CA_default

[ CA_default ]
dir              = .\\CA
certs            = $dir\\certs
crl_dir          = $dir\\crl
database         = $dir\\index.txt
new_certs_dir    = $dir\\newcerts
serial           = $dir\\serial
crlnumber        = $dir\\crlnumber
crl              = $dir\\crl.pem
certificate      = $dir\\certs\\ca-cert.pem
private_key      = $dir\\private\\ca-secretkey.pem
name_opt         = ca_default
cert_opt         = ca_default
crl_extensions   = crl_ext
default_days     = 3650
#この値はルートCAで他の証明書に署名する際に、-daysオプションを指定しない場合に適用されます。
default_crl_days = 30
default_md       = sha256
preserve         = no
policy           = policy_match

[ policy_match ]
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

[ req ]
default_bits            = 2048
#1024 (非推奨) ・2048 (推奨)・3072(高セキュリティ高負荷)・4096(高セキュリティ高負荷)
distinguished_name      = req_distinguished_name
x509_extensions         = v3_ca
string_mask             = utf8only
default_md              = sha256

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = JP
countryName_min                 = 2
countryName_max                 = 2
stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Kanto
localityName                    = Locality Name (eg, city)
localityName_default            = TOKYO
0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = ABC company.
organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = ABC Root CA
commonName                      = Common Name (e.g. server FQDN or YOUR name)
commonName_default              = abc.example.com
commonName_max                  = 64
emailAddress                    = Email Address
emailAddress_default            = abc@example.com
emailAddress_max                = 64

[ server_cert ]
basicConstraints       = CA:FALSE
nsCertType             = server
nsComment              = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage               = critical, digitalSignature, keyEncipherment
extendedKeyUsage       = serverAuth

[ v3_ca ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints       = critical,CA:true
keyUsage               = critical, digitalSignature, cRLSign, keyCertSign

[ crl_ext ]
authorityKeyIdentifier = keyid:always

CAの秘密鍵作成

CAの秘密鍵作成「ca-secretkey.pem」
※パスフレーズを入力するので忘れないようにしましょう

openssl genrsa -aes256 -out "秘密鍵ファイル" "鍵長1024/2048/3072/4096"
例:openssl genrsa -aes256 -out CA\private\ca-secretkey.pem 4096

CAの証明書作成

CAの証明書を作成「ca-cert.pem」及び「ca-cert.crt」
※作成時は秘密鍵のパスフレーズが効かれるので入力
 各識別値はオレオレの場合は自由に入力

openssl req -config “Configファイルパス” -key “秘密鍵ファイル名” -new -x509 -days “有効日数” -sha256 -out “出力先証明書ファイル名

PEM形式例:
openssl req -config CA\openssl.cfg -key CA\private\ca-secretkey.pem -new -x509 -days 3650 -sha256 -out CA\certs\ca-cert.pem

crtで作成するとスムーズにWindowsへインストールできます

CRT形式例:
openssl req -config CA\openssl.cfg -key CA\private\ca-secretkey.pem -new -x509 -days 3650 -sha256 -out CA\certs\ca-cert.crt

windowへCA証明書をインストール

作成した証明書ををダブルクリックして「証明書のインストール」を選択

証明書はルート証明書を選択
(オレオレなのでインストール時は警告が出ます)

自己認証CA局でCSRに署名する

openssl ca policy policy_anything -config “Configファイルパス” -out 署名後のファイル名.pem -infiles CSRファイルパス.csr

例:openssl ca -policy policy_anything -config CA\openssl.cfg -out CA\TEST-FGT-CSR.pem -infiles CA\TEST-FGT-CSR.csr

Linux CA認証局を作成する

openssl.conf ファイルを修正します

/etc/ssl/openssl.cnf

修正箇所*****************************
dir = /etc/ssl/PietoroCA
certificate = $dir/Pietoro-CAcert.pem
private_key = $dir/private/Pietoro-CAkey.pem

PietoroCA の配下に certs,private,crl,newcerts のディレクトリを作成する

mkdir -p /etc/ssl/PietoroCA
mkdir -p /etc/ssl/PietoroCA/private
mkdir -p /etc/ssl/PietoroCA/crl
mkdir -p /etc/ssl/PietoroCA/newcerts

シリアルを作成する

echo “0120” > PietoroCA/serial

証明書データベースを作成する

touch PietoroCA/index.txt

CAを作成する

cd /etc/ssl

今回のファイル名は下記にしてます
秘密鍵名=Pietoro-CAkey.pem
認証局証明書名=Pietoro-CAcert.pem
有効期限=3650日:10年

CA認証局用の秘密鍵と証明書を作成

openssl req -new -x509 -newkey rsa:2048 -out PietoroCA/Pietoro-CAcert.pem -keyout PietoroCA/private/Pietoro-CAkey.pem -days 3650

※このパスフレーズは次回使うので忘れずに
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:

各値は適当に
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:TOKYO
Locality Name (eg, city) []:SHINJYUKU
Organization Name (eg, company) [Internet Widgits Pty Ltd]:TEST-com
Organizational Unit Name (eg, section) []:TEST-section
Common Name (e.g. server FQDN or YOUR name) []:PIETORO.jp
Email Address []:

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y”

下記のファイルが作成される
PietoroCA/Pietoro-CAcert.pem : 自己署名済みCA証明書
PietoroCA/private/Pietoro-CAkey.pem : CA証明書の秘密鍵

自己認証CA局でCSRに署名する

openssl ca -policy policy_anything -out 署名後のファイル名.pem -infiles CSRファイルパス.csr

※CAのパスフレーズを聞かれるので先ほど指定した値を入力
※サーバー証明書CSRと認証局の国・都市名等の値が違うと「The stateOrProvinceName field XXXX」というようなエラーが出るようなので、オプション「-policy policy_anything」をつけてます

署名後のファイルが作成される

コメント

タイトルとURLをコピーしました