s/mime 用の opensssl を使った自己署名鍵の作り方と使い方
Menu
openssl での自己署名鍵の生成
以下のファイルを smime.cnf として用意します。
[req] distinguished_name = req_distinguished_name [req_distinguished_name] countryName = Country Name (2 letter code) countryName_default = JP countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Okinawa stateOrProvinceName_default = Some-State localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) 0.organizationName_default = University of Ryukyus organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (e.g. server FQDN or YOUR name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [smime] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer subjectAltName = email:copy extendedKeyUsage = emailProtectionさらに以下の sh script を作る
#!/bin/sh export OPENSSL_CONF=smime.cnf openssl genrsa -aes256 -out ca.key 4096 openssl req -new -x509 -days 3650 -key ca.key -out ca.crt openssl genrsa -aes256 -out smime_test_user.key 4096 openssl req -new -key smime_test_user.key -out smime_test_user.csr openssl x509 -req -days 3650 -in smime_test_user.csr -CA ca.crt -CAkey ca.key -set_serial 1 -out smime_test_user.crt -addtrust emailProtection -addreject clientAuth -addreject serverAuth -trustout openssl pkcs12 -export -in smime_test_user.crt -inkey smime_test_user.key -out smime_test_user.p12 openssl pkcs12 -in smime_test_user.p12 -out smime_test_user.pemたくさんパスワードを聞かれる。 smime_test_user.crt が生成された pem 。
openssl x509 -text -noout -in smime_test_user.crt | more openssl x509 -text -noout -in smime_test_user.pem | moreこれを gpgsm --import することはできないらしい。
% gpgsm --import smime_test_user.pem gpgsm: self-signed certificate has a BAD signature: Bad signature gpgsm: basic certificate checks failed - not importedいくつか tool があり変換できるらしい。pem2openpgp とか。
けど、結論的には gpgsm で生成する方が楽。
openssl での署名
draft を用意します。% openssl smime -sign -in draft -text -out draft.signed -signer smime_test_user.pemこれを
% openssl smime -verify -noverify -in draft.singedで検証できます。 自己署名の検証には -noverify が必須。
署名は mime multi part encoding される。
Content-Type: text/plainが追加されてしまう。
これを使って、受け取ったs/mimeメールの検証は可能
暗号化
smime-key.pem が相手で、smime_test_user.pemが自分のだとする。本来はsmime-key.pemには公開鍵しか入ってない。
openssl smime -encrypt -des3 -in signed.mail.out -out signed.mail.encrypt smime-key.pem openssl smime -sign -in signed.mail.encrypt -signer smime_test_user.pem -out sign.txt検証
openssl smime -verify -in sign.txt -CAfile smime-key.pem -out sign_verify.txt Verification successful解読
openssl smime -decrypt -recip smime_test_user.pem -inkey smime_test_user.pem -in sign_verify.txt -out plain.txtcf. https://qiita.com/yamori813/items/ed263a99e825c54975c1