
なんとなくSSLとPKIとやらについて、[PKI]で分離できないままつらつらと書いています。ここでは OpenSSLのコマンドについて簡単なメモです。
LinuxでSSLというと、OpenSSLということにしておきましょう。何気なくApacheやPostgreSQLなどと組み合わせて使ったりしているのではないでしょうか。
バイナリとテキスト形式がありますが、バイナリ的なものはASN.1という形をしています。テキストなのはそれをBASE64化したもので、頭に種類を付けています。その中からいくつかを挙げてみましょう。いくつあるのかよくわからないので見つけたら追加してみる予定。
PEM?
-----BEGIN RSA PRIVATE KEY-----
暗号化されている場合、その方式のヘッダ等がつく SSHなどで使用される
PKCS#8形式
-----BEGIN PRIVATE KEY-----
-----BEGIN ENCRYPTED PRIVATE KEY-----
SSL証明書 (何形式かは不明 RSA,DSA共通)
-----BEGIN CERTIFICATE-----
SSLの署名要求 (PKCS#10?)
-----BEGIN CERTIFICATE REQUEST-----
GnuPG によるもの
-----BEGIN PGP PUBLIC KEY BLOCK-----
SSLの証明書発行手順とS/MIMEの秘密鍵/証明書発行手順は微妙に異なるようです。まぁ、送り方、受け取り方が違うだけで同じなんですけど。SSHの場合は証明書や認証局的なものは不要ですが、公開鍵を証明書にくるんだりせずそのままファイルにしています。秘密鍵は他のと同じようです。これもいろいろファイル形式がぁ・・・。
openssl だけ入力するとコマンドモードになったりします。
乱数ファイルの生成? md5つくるだけ
$ openssl md5 filename
$ openssl dgst {-md5|-md4|-md2|-sha} filename
$ openssl genrsa -out privkey.key [-rand 乱数ファイル] {-des|-des3|-idea|-aes256} 鍵長 // 512とか1024
暗号化したいとき -des 等をつける 鍵長は最後
OpenSSHのssh-keygen も秘密鍵を生成できます。
$ openssl req -new
-key 秘密鍵 // 秘密鍵がある場合
-newkey rsa:1024 -keyout 秘密鍵ファイル // 新規の秘密鍵を生成する場合
-x509
-days 有効日数 x509のオプションが利用できる -out 自己署名証明書.crt // 自己署名証明書の場合
-out 署名要求ファイル名.req // 自己署名しない場合
鍵も作る場合 -newkey 行を付ける。自己署名証明書を作る場合 -x509 行を付ける。 署名要求の場合は -out 行のみ付ける。
$ openssl x509 -x509toreq -signkey 鍵ファイル -in 証明書 -out 署名要求
$ openssl x509 -req -signkey 鍵ファイル -in 署名要求 -out 証明書
$ openssl req -in 署名要求ファイル -text
PEMはBASE64でエンコードされたテキスト形式、DERはバイナリ形式。それを変換。他のコマンド中で -inform や -outform を指定してもいい
$ openssl x509 -in 証明書pem形式 -inform {PEM|DER} -out 証明書der形式 -outform {PEM|DER}
鍵と証明書の他の設定ファイルはシリアルナンバーだけ必要
$ openssl x509 -CA CAの証明書 -CAkey CAの鍵 -req -in 署名要求 -days 有効期限日数 -out 新証明書 -CAcertserial
-CAcertserial は初回のみ必要 拡張子 srl のシリアル番号ファイルが作られる
署名するだけです。鍵の漏洩した証明書を無効化する手段などはないので注意してください。
こっちは認証局のディレクトリを準備して…
サーバ用等のオプション属性が付加できます。
鍵と証明書のセットを作る
$ openssl pkcs12 -export -in 証明書 -inkey 鍵 [-certfile CAの証明書] -out pkcs12
-certfile はなくていい秘密鍵はpkcs8形式またはPEM形式である。
PEM形式の場合
$ openssl rsa -in ファイル名 -out ファイル名
PKCS#8の場合?
$ openssl pkcs8 -topk8 -in ファイル名.key -inform {pem|der} -out ファイル名 -outform {pem|der} -nocrypt