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
copy_extensions  = copy   # CSR にあった証明書エクステンション(KU・EKU・SANとか)をコピー

[ 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_extensions          = v3_req    #はCSR生成用

[ 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
##subjectAltName        = DNS:test-FGT.local   #SANを明示的に追記
##subjectAltName        = DNS:IP.1 = 10.0.1.1    #SANを明示的に追記

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

[ crl_ext ]
authorityKeyIdentifier = keyid:always

[ v3_req ] 
basicConstraints        = CA:FALSE
keyUsage                = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName          = @alt_names 

[ alt_names ] 
DNS.1   = test-FGT.local

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証明書をインストール

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

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

CSR発行

CSRの発行方法

openssl req -new -config “Configファイルパス” -key 秘密鍵.pem -out CSRファイル.csr

例:openssl req -new -config CA\openssl.cfg -key CA\private\Naked-key.pem -out Naked-crt.csr

SANを含める場合は、openssl.cfg を使用して、その設定ファイル内でSANの情報を定義する

ーーーー抜粋ーーーーー
[ req ]
req_extensions = v3_req
[ v3_req ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = 対象のFQDN

CA局オレオレ証明書でCSRに署名する

※指定してるconfigや証明書最初と違うCAになってるけど気にしないで

CA局オレオレ証明書でCSRに署名

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

例:openssl ca -policy policy_anything -config CA\openssl-BigBoss.cfg -out CA\Naked-crt.pem -infiles CA\Naked-crt.csr

作成した「Naked-crt.pem」に署名で使用したCA証明書をくっつける

**********Naked-crt.pemの内容**************************
Certificate:
~~~~~~~~~~~~~~
~~~~~省略~~~~~~~
~~~~~~~~~~~~~~
—–BEGIN CERTIFICATE—–
[元々のNaked-crt.pem の内容]
—–END CERTIFICATE—–
###メモ帳などでここに署名したCA証明書の内容を張り付ける
—–BEGIN CERTIFICATE—– 
[署名したCA証明書の内容]   
—–END CERTIFICATE—–  

署名したCA証明書も出てきました

注意:パソコンの「信頼できるルート証明書」の中にCA証明書(BigBoss-cert)がインポートされてないと検証できないので、出てこないので注意

Linux CA認証局を作成する

Linuxは直接openssl.cnfを変更してます

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をコピーしました