s/mime 用の gpgsm を使った自己署名鍵の作り方と使い方
Menu
install
brew install gpg
鍵の生成
X.509 subject name を聞かれるので用意しておく。
C=JP, ST=Okinawa, L=Ginowan, O=Univerisy of the Ryukyus, OU=Faculty of Engineering, CN=kono@ie.u-ryukyu.ac.jp
以下のコマンドを実行すると pem 形式の鍵が作られる。パスワードを要求されるので三回入れる。
% gpgsm --generate-key -o kono-cr.pem
gpgsm (GnuPG) 2.3.2; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) RSA
(2) Existing key
(3) Existing key from card
Your selection? 1
What keysize do you want? (3072)
Requested keysize is 3072 bits
Possible actions for a RSA key:
(1) sign, encrypt
(2) sign
(3) encrypt
Your selection? 1
Enter the X.509 subject name: C=JP, ST=Okinawa, L=Ginowan, O=Univerisy of the Ryukyus, OU=Faculty of Engineering, CN=kono@ie.u-ryukyu.ac.jp
Enter email addresses (end with an empty line):
> kono@cr.ie.u-ryukyu.ac.jp
>
Enter DNS names (optional; end with an empty line):
>
Enter URIs (optional; end with an empty line):
>
Create self-signed certificate? (y/N) y
These parameters are used:
Key-Type: RSA
Key-Length: 3072
Key-Usage: sign, encrypt
Serial: random
Name-DN: C=JP, ST=Okinawa, L=Ginowan, O=Univerisy of the Ryukyus, OU=Faculty of Engineering, CN=kono@ie.u-ryukyu.ac.jp
Name-Email: kono@cr.ie.u-ryukyu.ac.jp
Proceed with creation? (y/N) y
Now creating self-signed certificate. This may take a while ...
gpgsm: about to sign the certificate for key: &469055AB822ADC3CF2BAACB99F75EF5879284FDE
gpgsm: certificate created
Ready.
kono-cr.pem が作られる。中身は
-----BEGIN CERTIFICATE-----
MIIFDjCCA3agAwIBAgIIaquhrzh3ue4wDQYJKoZIhvcNAQELBQAwgZYxHzAdBgNV
....
T8ReSdO/npRqfx+6u7WcEuJdhmdUR6ILCu0U2ueNvfIjaMF80aiNnCQH+3IVV0AM
f0E=
-----END CERTIFICATE-----
みたいな感じ。
pem の確認
% file kono-cr.pem
kono-cr.pem: PEM certificate
確かに pem だ。詳しく見るには openssl を使って
openssl x509 -text -noout -in kono-cr.pem | more
で見ることができます。gpgsm では以下の用に import してから見る。
秘密鍵のimport
これを gpgsm に import すると使えるようになる。
% gpgsm --import kono-cr.pem
gpgsm: total number processed: 1
gpgsm: imported: 1
これを macOSの Mail.app で使うには
% gpgsm -o secret-gpg-key.p12 --export-secret-key-p12 0x1A6A0C50
としてから、open secret-gpg-key.p12 して、KeyChain.app から trust してやれば良い。
ただし、brew の gpgsm (GnuPG) 2.3.2 は壊れているので、gpgsm (GnuPG) 2.3.2-beta105 を自分で build して使う。github のは少しファイルが足りないが、
wget https://gnupg.org/ftp/gcrypt/gnupg/gnupg-2.3.2.tar.bz2
から足りないのを補えばいける。
秘密鍵のlist
% gpgsm --list-secret
/Users/kono/.gnupg/pubring.kbx
------------------------------
ID: 0x4BB8BEDD
S/N: 6AABA1AF3877B9EE
(dec): 7686414962976602606
Issuer: /CN=kono@ie.u-ryukyu.ac.jp/OU=Faculty of Engineering/O=Univerisy of the Ryukyus/L=Ginowan/ST=Okinawa/C=JP
Subject: /CN=kono@ie.u-ryukyu.ac.jp/OU=Faculty of Engineering/O=Univerisy of the Ryukyus/L=Ginowan/ST=Okinawa/C=JP
aka: kono@cr.ie.u-ryukyu.ac.jp
validity: 2021-10-09 22:41:34 through 2063-04-05 17:00:00
key type: rsa3072
key usage: digitalSignature nonRepudiation keyEncipherment dataEncipherment
chain length: unlimited
sha1 fpr: 58:50:69:9C:DC:96:30:F5:9C:6D:C6:B0:25:22:32:86:4B:B8:BE:DD
sha2 fpr: E6:6C:E5:B4:B8:00:48:8B:13:14:9F:2B:D5:99:82:88:32:E1:B2:6E:1F:68:92:D0:91:BA:0B:D4:53:97:4E:BB
gpgsm での署名と検証
draft を用意する。
gpgsm --sign -b -o gpg.sign draft -b でハッシュを別に生成できる。 gpgsm --verify gpg.sign draftこの二つを MIME multi-part でまとめれば良いはず。
もらったメールを gpgsm で検証するには mhn ではなく手動で展開してコマンドを実行すれば良いはず。
gpgsm での暗号化
署名とファイルと二つ必要で、それを mime multi part してくれることはないので、自分でやる。暗号化と署名
% gpgsm --recipient kono@cr.ie.u-ryukyu.ac.jp -a -o draft.enc.gpgsm -e draft % gpgsm --sign -a -o draft.sign.gpgsm draft.enc.gpgsm検証
% gpgsm --verify -a draft.draft.sign.gpgsm draft.enc.gpgsm復号
% gpgsm -d draft.enc.gpgsmそうじゃなくて、
% gpgsm --recipient kono@cr.ie.u-ryukyu.ac.jp -a -o draft.enc.p7m -e draft % gpgsm -d draft.enc.p7mで良いらしい。