1. ルート証明書の作成
環境変数の設定
CA_NAMEcc
SUBJECT=/C=JP/ST=***/L=***/O=***/OU=${CA_NAME}/CN=${CA_NAME}
秘密鍵の作成
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 -out ${CA_NAME}.key
ルート証明書の作成
openssl req -new -x509 \
-out ${CA_NAME}.crt -key ${CA_NAME}.key \
-days `expr 365 \* 3` \
-subj ${SUBJECT}
2. サーバー署名リクエストの作成
環境変数の設定
SERVER=*******
SUBJECT=/C=JP/ST=***/L=***/O=***/OU=${SERVER}/CN=${SERVER}
サーバー秘密鍵の作成
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 -out ${SERVER}.key
サーバー署名リクエストの作成
openssl req -new \
-out ${SERVER}.csr \
-key ${SERVER}.key \
-subj ${SUBJECT}
3. サーバー証明書の作成
Extention Fileの作成
cat << 'EOS' > san.txt
> subjectAltName = DNS:***, IP:*.*.*.*
> EOS
インデックスファイルの作成
mkdir /etc/pki/CA
touch /etc/pki/CA/index.txt
サーバー証明書の作成
openssl ca \
-in ${SERVER}.csr \
-out ${SERVER}.crt \
-outdir . \
-cert ${CA_NAME}.crt \
-keyfile ${CA_NAME}.key \
-days `expr 365 \* 3` \
-extfile san.txt \
-create_serial -rand_serial
4. クライアント署名リクエストの作成
環境変数の設定
CLIENT=*******
SUBJECT=/C=JP/ST=KANAGAWA/L=KAWASAKI/O=mabe/OU=${CLIENT}/CN=${CLIENT}
クライアント秘密鍵の作成
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 -out ${CLIENT}.key
クライアント署名リクエストの作成
openssl req -new\
-out ${CLIENT}.csr \
-key ${CLIENT}.key \
-subj ${SUBJECT}
5. クライアント証明書の作成
クライアント証明書の作成
openssl ca \
-outdir . \
-cert ${CA_NAME}.crt \
-keyfile ${CA_NAME}.key \
-out ${CLIENT}.crt \
-days `expr 365 \* 3` \
-create_serial -rand_serial \
-infiles ${CLIENT}.csr
6. クライアント証明書と秘密鍵の格納
クライアント証明書と秘密鍵の格納
openssl pkcs12 \
-export -in ${CLIENT}.crt \
-inkey ${CLIENT}.key \
-out ${CLIENT}.pfx \
-name ${CLIENT}
インポートする環境によっては -legacy が必要かも。
7. 見直しスクリプト
#!/bin/bash -x
CA_NAME=*****
CA_SUBJECT=/C=JP/ST=Kanagawa/L=Kawasaki/O=mabe/OU=${CA_NAME}/CN=${CA_NAME}
SERVER_NAME=*****
SERVER_SUBJECT=/C=JP/ST=Kanagawa/L=Kawasaki/O=mabe/OU=${SERVER_NAME}/CN=${SERVER_NAME}
SERVER_IP=*.*.*.*
CLIENT_NAME=****
CLIENT_SUBJECT=/C=JP/ST=Kanagawa/L=Kawasaki/O=mabe/OU=${CLIENT_NAME}/CN=${CLIENT_NAME}
PASSWORD=***
# CA秘密鍵の作成
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 -out ${CA_NAME}.key -quiet
# CA証明書の作成
openssl req -new -x509 \
-out ${CA_NAME}.crt -key ${CA_NAME}.key \
-days `expr 365 \* 3` \
-subj ${CA_SUBJECT}
# サーバー秘密鍵の作成
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 -out ${SERVER_NAME}.key -quiet
# サーバー署名リクエストの作成
openssl req -new \
-out ${SERVER_NAME}.csr \
-key ${SERVER_NAME}.key \
-subj ${SERVER_SUBJECT}
# SAN拡張ファイルの作成
cat << EOS > san.txt
subjectAltName = DNS:${SERVER_NAME}, IP:${SERVER_IP}
EOS
# サーバー証明書の作成
openssl x509 -req \
-in ${SERVER_NAME}.csr \
-out ${SERVER_NAME}.crt \
-CA ${CA_NAME}.crt \
-CAkey ${CA_NAME}.key \
-days `expr 365 \* 3` \
-extfile san.txt
# クライアント秘密鍵の作成
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 -out ${CLIENT_NAME}.key -quiet
# クライアント証明リクエストの作成
openssl req -new\
-out ${CLIENT_NAME}.csr \
-key ${CLIENT_NAME}.key \
-subj ${CLIENT_SUBJECT}
# クライアント証明書の作成
openssl x509 -req \
-CA ${CA_NAME}.crt \
-CAkey ${CA_NAME}.key \
-days `expr 365 \* 3` \
-in ${CLIENT_NAME}.csr \
-out ${CLIENT_NAME}.crt \
-days `expr 365 \* 3`
# pfxファイルの作成
openssl pkcs12 \
-legacy \
-export -in ${CLIENT_NAME}.crt \
-inkey ${CLIENT_NAME}.key \
-out ${CLIENT_NAME}.pfx \
-name ${CLIENT_NAME} \
-passout pass::${PASSWORD}