TechnologyTips

OpenSSL Tips

Kotaです。
OpenSSL関連のコマンドをいつも忘れるので備忘録でメモ

(自分用メモからなので動く保証はありませんが。。)

ファイルのmd5/sha1/sha256ハッシュを得る

openssl dgst -md5 plain.txt
openssl dgst -sha1 plain.txt
openssl dgst -sha256 plain.txt

ファイルをAES256共通鍵で暗号化/復号化する
-aesの代わりに-base64でエンコード、デコードも可

openssl enc -aes256 -in plain.txt -out enc.txt
openssl enc -aes256 -d -in enc.txt -out plain.txt

serverの秘密鍵を鍵長4096でを生成する

openssl genrsa 4096 > server.key

秘密鍵からCSRを生成する

openssl req -new -key server.key -out server.csr

SHA2で生成する場合

openssl req -new -sha256 -key server.key -out server.csr

CSRの中身を確認

openssl req -verify -text < server.csr

自己署名する

openssl req -in server.csr -key server.key -x509 -out server.crt -days 365

x509の各種情報を確認

openssl x509 -text < server.crt

正しい証明書のペアか確認する
下記コマンドのBEGIN PUBLIC KEY以降の出力が正しい事

openssl x509 -pubkey < server.crt
openssl rsa -pubout < server.key

もしくは-A8は適当に調整して

diff <(openssl rsa -pubout < server.key) <(openssl x509 -pubkey < server.crt|grep -A8 "BEGIN PUBLIC")

CAに対して有効な証明書か確認

openssl verify -CAfile CA.pem < server.crt

シングルルートでないCA(ここではGlobalSing QuickSSL)に対して有効な証明書か確認

mkdir GlobalSign_QuickSSL
cd GlobalSign_QuickSSL
wget https://jp.globalsign.com/repository/common/cer/rootcacert.cer
wget https://jp.globalsign.com/repository/common/cer/dvcacert.cer
rename cer pem *.cer
c_rehash .
cd ../
openssl verify -CApath GlobalSign_QuickSSL < server.crt
find . -type l -delete

サーバーに接続してSSL証明書情報を取得

openssl s_client -connect www.example.com:443 -showcerts

鍵をパスフレーズ無しに変換

openssl rsa -in server.key -out nopass_server.key

逆にパスフレーズをセット

openssl rsa -des -in nopass_server.key -out server.key

DER形式に鍵を変換

openssl x509 -outform DER -in server.key -out server.der

p12形式でCA,秘密鍵、公開鍵を鍵まとめる

openssl pkcs12 -export -in server.crt -inkey server.key -certfile CA.crt -out server.p12

reqの際に入力する値を省略する
/etc/pki/tls/openssl.cnfのstateOrProvinceName_defaultなどを編集する事で事前定義も可能。
その際は-conf /etc/pki/tls/openssl.cnfを指定する。

暗号スイートの表示

openssl ciphers -v 'RSA:!NULL!MD5:!EXP:+HIGH'

Public Key Pinning Extension for HTTPに使うBASE64を秘密鍵から取り出す

openssl rsa -in server.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64

Public Key Pinning Extension for HTTPに使うBASE64をCSRから取り出す

openssl req -in server.csr -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

Public Key Pinning Extension for HTTPに使うBASE64を証明書から取り出す

openssl x509 -in server.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

Public Key Pinning Extension for HTTPに使うBASE64をサーバーへ接続して取り出す

openssl s_client -servername www.example.com -connect
 www.example.com:443 | openssl x509 -pubkey -noout | openssl rsa -pubin 
-outform der | openssl dgst -sha256 -binary | openssl enc -base64

TLSA/DANEに使うSHA256を秘密鍵から取り出す

openssl rsa -in server.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -sha256

TLSA/DANEに使うSHA256をCSRから取り出す

openssl req -in server.csr -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256

TLSA/DANEに使うSHA256を証明書から取り出す

openssl x509 -in server.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256

TLSA/DANEに使うSHA256をサーバーへ接続して取り出す

openssl s_client -servername www.example.com -connect www.example.com:443 | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256

1024バイトのランダムデーターの生成

openssl rand 1024 > 1024.rand

CAを作成(手抜きVer)

touch index.txt crlnumber
mkdir certs newcerts cri private keys
echo '01' > serial
cp /etc/pki/tls/openssl.cnf
openssl genrsa -out private/cakey.pem -des3 2048
openssl req -config openssl.cnf -new -x509 -days 1825 -key private/cakey.pem -out cacert.pem

CAにて署名

openssl ca -config openssl.cnf -days 730 -out server.crt -infiles server.csr

んんんんーーーーもっともっとあったんですが、、思い出せませんw
思い出したら更新します。

コメントを残す