ネットを探してても時間が浪費するので、よく使いそうな機能をまとめておく
オレオレ証明書を作る。
この記事に書いたこと
オレオレ証明書を作る
オレオレ証明書とは、自己署名証明書(第三者の署名を持たない証明書)。自己署名証明書は自分で自分の身分を主張する。似たような事例に「振り込め詐欺」があり、これに因んで、オレオレ証明書という。
手順を書いた。
オレオレ証明書でAliceの証明書を発行する
Aliceの署名に、私が署名して証明書する。
手順は次の通り。
オレオレ証明書で認証基盤(認証局機能)を作る
PKIでのCAの役割をする。署名した発行済証明書を管理する。
- CA を構成
- CA として署名する
- 署名した証明書一覧
- Revokeを試す。
はじめに。
証明書を使って、「公開鍵」を証明する。逆に考えれば、証明書を発行したことを否定できない。
openssl の準備
現代では、ほとんどの環境で準備とインストールを気にせずに使えると思う。インストール必要なのは、Windowsくらいかも。
最初にバージョンを確認しておく。
openssl version
私が今回用いいたのは次のバージョンです。
$ openssl version OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
自己署名証明書(オレオレ証明書)の作成
秘密鍵をつくり、公開鍵を導出する。公開鍵を秘密鍵で署名する。署名に秘密鍵で署名する。
秘密鍵作成
openssl genrsa 2048 > privkey.pem
署名リクエストを作成
openssl req -new -key privkey.pem -subj '/C=AU/ST=Some-State/O=OreOre/CN=Ore' -out csr.pem
秘密鍵を使って公開鍵を導出。公開鍵に秘密鍵で署名する。証明書を作る
署名リクエストのSubjectを確認
openssl req -in csr.pem -noout -subject # -> subject=C = AU, ST = Some-State, O = OreOre, CN = Ore
署名リクエストへ署名
openssl x509 -req -in csr.pem -signkey privkey.pem -out crt.pem
発行者・被発行者を確認
openssl x509 -in crt.pem -noout -subject -issuer # -> subject=C = AU, ST = Some-State, O = OreOre, CN = Ore # issuer=C = AU, ST = Some-State, O = OreOre, CN = Ore
Subject(一般的には主体者と訳される)は、「主題・主語・容疑者・被験者・被写体・的(まと)」の意味があり、ここでは「被発行者・対象者・所有者・申請者」の意味で捉えておくといいと思う。
issuer は発行者と訳される。発行社・発行人・発行担当である。ここでは、「証人」と思っておくと良い。
Aliceの証明書を作る
Aliceの証明書を作成する。オレオレ証明書による署名とほぼ同等である。Subjectが変わる。
Aliceの秘密鍵を作成。
openssl genrsa 2048 > alice.privkey.pem
Aliceの署名リクエストを作成
openssl req -new -key alice.privkey.pem \ -subj '/C=AL/ST=Ice/O=Alice on Ice/CN=Alice wonder' \ -out alice.csr.pem
Aliceの証明書に署名する
openssl x509 -req \ -CA crt.pem -CAkey privkey.pem \ -CAcreateserial -CAserial serial \ -in alice.csr.pem > alice.crt.pem
発行したAlice の証明書を確認する。
openssl x509 -issuer -subject -noout < alice.crt.pem ## => issuer=C = AU, ST = Some-State, O = OreOre, CN = Ore ## subject=C = AL, ST = Ice, O = Alice on Ice, CN = Alice wonder
発行者(Issuer)がオレオレになっていることがわかる。
証明書の検証
openssl verify -verbose -CAfile crt.pem alice.crt.pem # => alice.crt.pem: OK
Alice証明書を、発行者の証明書(オレオレ証明書)で検証する。
CA を構成
openssl ca ## エラーがでるので逐次対応する
対応
mkdir demoCA mkdir demoCA/private mkdir ./demoCA/newcerts cp privkey.pem demoCA/private/cakey.pem cp crt.pem demoCA/cacert.pem touch demoCA/index.txt echo 00 > demoCA/serial
対応結果
openssl ca ## エラーが出ないことを確認
この対応は Debian/Ubuntuのopensslのデフォルト設定(/usr/lib/ssl/openssl.cnf
) を用いた場合の対応であり、実験を簡単にする目的で行っている。
設定ファイルを指定するのが正しい運用です。 ( $ openssl -config openssl.cnf
)
CAとして 署名し証明書を発行
openssl ca -in alice.csr.pem -policy policy_anything
証明書に本当に署名するか尋ねられる。
Sign the certificate? [y/n]:
署名した証明書を取り出す
cp demoCA/newcerts/00.pem alice.ca_signed.crt.pem
Aliceの証明書を検証する
openssl verify -verbose -CAfile demoCA/cacert.pem alice.ca_signed.crt.pem ## => alice.ca_signed.crt.pem: OK
CA の発行済の証明書を確認する
証明書を発行したら、シリアル値と発行済の証明書が管理される。
cat demoCA/index.txt # V 240311012107Z 00 unknown /C=AL/ST=Ice/O=Alice on Ice/CN=Alice wonder ls -l demoCA/newcerts/00.pem # -> -rw-rw-r-- 1 takuya takuya 4381 3月 12 10:21 demoCA/newcerts/00.pem
単純にx509 で署名する場合と違うのは、この管理があるかどうか。
revoke してCRLに書き加える。
特定の証明書をRevokeする。
openssl ca -revoke alice.ca_signed.crt.pem # Revoking Certificate 00.
結果を確認すると、V→R
に変わっている。
cat demoCA/index.txt # R 240311012107Z 230312012549Z 00 unknown /C=AL/ST=Ice/O=Alice on Ice/CN=Alice wonder
CRLを見る。
echo 00 > ./demoCA/crlnumber openssl ca -gencrl > crl.txt openssl crl -text < crl.txt
まとめ
他人の証明書リクエストに「自分の秘密鍵」で署名をつけることができる。
openssl x509 -req \ -CA crt.pem -CAkey privkey.pem \ -CAcreateserial -CAserial serial \ -in alice.csr.pem > alice.crt.pem
これが大事なんだと思う。
追記
オレオレ証明書といえども、振り込め詐欺のようなものではなく、「規格準拠」した正しい証明書である。
署名(リクエスト)に署名するだけとはいえCAとして振る舞う必要がある。
ここで作ったオレオレ証明書はOSへ導入するとそのまま使うことができるが。普通はやらない。
最近はルータの管理画面がhttp で困るので導入するかな。
参考資料
- https://zenn.dev/ztrehagem/scraps/01d6aebd9fc352
- https://www.karakaram.com/creating-self-signed-certificate/
- https://blog.csdn.net/u010058695/article/details/122999434
- https://stackoverflow.com/questions/40733432/receiving-error-democa-newcerts-no-such-file-or-directory
- https://blog.at-human.com/2021/02/oreore-ssl/
- https://moewe-net.com/uncategorized/openssl-create-certificate
- https://www.webtech.co.jp/blog/optpix_labs/server/1159/
- https://garafu.blogspot.com/2018/07/openssl-create-sever-cert.html
- https://qiita.com/3244/items/65dd3926fab76b9dd4aa
- https://qiita.com/bashaway/items/ac5ece9618a613f37ce5