Skip to content

Instantly share code, notes, and snippets.

@sweshelo
Created June 28, 2022 08:14
Show Gist options
  • Save sweshelo/fcd19fd0a9b29f851f1f2a169cadf2f2 to your computer and use it in GitHub Desktop.
Save sweshelo/fcd19fd0a9b29f851f1f2a169cadf2f2 to your computer and use it in GitHub Desktop.
オレオレ認証局でSSL証明書に署名

CA

CAの秘密鍵 生成

以下のコマンドを実行し、CA用の秘密鍵を生成する

openssl genrsa -aes128 2048 > ca.key

パスフレーズのない鍵を生成するには、代わりに以下を利用する

openssl genrsa 2024 > ca.key

CAのCSR 生成

秘密鍵に対応する公開鍵と、秘密鍵の所有者の情報を記載したCSRファイルを生成する
所有者の情報に正しい値を入力する

openssl req -new -key ca.key > ca.csr

CAの証明書 発行

本来であれば別の認証局が署名を行うが、ここでは自己署名を行い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

サーバ

秘密鍵とCSRの生成

サーバ側で、一連の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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment