以下のコマンドを実行し、CA用の秘密鍵を生成する
openssl genrsa -aes128 2048 > ca.key
パスフレーズのない鍵を生成するには、代わりに以下を利用する
openssl genrsa 2024 > ca.key
秘密鍵に対応する公開鍵と、秘密鍵の所有者の情報を記載したCSRファイルを生成する
所有者の情報に正しい値を入力する
openssl req -new -key ca.key > ca.csr
本来であれば別の認証局が署名を行うが、ここでは自己署名を行いCA証明書を発行する
openssl x509 -in ca.csr -days 365 -req -signkey ca.key > ca.crt
./demoCA
に認証局としてのファイル類が生成される。SubjectやDNS、IPアドレスは正当なものに置き換える。
$CA/serial
にはシリアルナンバーが入り、証明書の置換作業などを必要に応じて内容を編集する。
CA=$PWD/demoCA
mkdir $CA
mkdir $CA/certs
mkdir $CA/private
mkdir $CA/crl
mkdir $CA/newcerts
touch $CA/index.txt
echo 1001 > $CA/serial
echo "subjectAltName = DNS:localhost, IP:127.0.0.1" > $CA/san.ext
echo "basicConstraints=CA:true" > $CA/android_options.ext
サーバ側で、一連のCAの鍵+CSRの発行と同様の作業を行う
NOTE CSR発行の際、殆どの項目は任意入力で良いが、FQDNは必須である
# サーバの秘密鍵 生成
openssl genrsa -aes128 2048 > server.key
# サーバのCSR 生成
openssl req -new -key server.key > server.csr
認証局のマシンにCSRファイルをコピーするなどして、証明書に署名を行う
Androidでも利用可能な証明書を発行したい場合、末尾に-extfile android_options.ext
オプションを付与する
openssl ca -in server.csr -out server.crt -days 365 -extfile san.ext -keyfile ca.key -cert ca.crt -policy policy_anything