Personal tools
You are here: Home コラム 技術コラム opensslコマンドtips
Document Actions

opensslコマンドtips

元は、AirOneのセキュリティ関連のファイルの説明文書です。 opensslコマンドのtips文書として使えるので、いくつか追記して、公開します。

* PKI関連
=========
** identity.pem(秘密鍵ファイル)
** cert.pem(証明書ファイル)
AirOneの起動時にidentity.pemとcert.pemの整合性チェックを行います(airu_cert_validate())。
チェック項目、エラーコード、解析方法を説明します。

チェック項目
------------
1. cert.pemがx509のフォーマットか?
エラーコード: #0301005
解析方法: openssl x509 -text -in cert.pem
でエラーがでないこと。

2. identity.pemが入力パスワードで読めるか?
エラーコード: #0301003
解析方法: openssl rsa -text -passin pass:パスワード -in identity.pem
でエラーがでないこと。

3. identity.pemの秘密鍵とcert.pemの公開鍵が正しいPK-pairか?
エラーコード: #0301005
解析方法: openssl rsa -passin pass:パスワード -in identity.pem -pubout

openssl x509 -in cert.pem -pubkey
のBEGIN PUBLIC KEYとEND PUBLIC KEYの間の出力が一致していること。

4. cert.pemがopen-ca.ariel-networks.comから発行された証明書か?
エラーコード: #0301006
解析方法: openssl x509 -text -in cert.pem
のissuer(発行者)が
Issuer: C=JP, ST=Tokyo, L=Nakameguro, O=Ariel Networks, Inc., CN=ArielAirOne root
となっていること。
[注] 正確には、cert.pemの署名に使われた秘密鍵が、open-ca.ariel-networks.comの秘密鍵かどうか(これのコマンドラインからの確認方法は不明)

5. cert.pemのユーザ名がuser.confのユーザ名と一致しているか?
エラーコード: #0301007
解析方法: openssl x509 -text -in cert.pem
のsubjectのユーザIDがuser.confのユーザIDと一致していること。

6. cert.pemの有効期限が残っているか?
エラーコード: #0301008
解析方法: openssl x509 -text -in cert.pem
のValidityのNot Afterが現在時刻より未来であること。


** csr.pem(署名要求ファイル: Certificate Signing Request)
AirOneの実行時のエラーに関係しません。
セットアップ時に、identity.pemから生成され、open-caに送信されます。
open-caはcsr.pemからcert.pemを発行します。
上記のプロセスが終わると、以降、参照されることはありません。



* RSA関連
=========
$ openssl genrsa -out identity.pem [-des -passout pass:パスワード] [numbits]
秘密鍵の作成
-rand fileで乱数の指定が可能。
-desや-ideaで秘密鍵を(パスワードで)暗号化できる。
デフォルトフォーマットはPEM

$ openssl rsa -pubout -in identity.pem -out rsapub.pem -passin pass:パスワード
秘密鍵から公開鍵の作成

$ openssl rsautl -encrypt -pubin -inkey rsapub.pem -in input.txt -out result.dat
input.txtファイルをRSAで暗号化します(input.txtファイルのサイズはRSA秘密鍵のサイズ(numbits)以下)。

$ openssl rsautl -inkey identity.pem -in result.dat -decrypt -out orig.txt
暗号化されたファイル(result.dat)を復号化します。秘密鍵のパスワードが必要です。

$ openssl rsautl -sign -in input.txt -inkey identity.pem -out sign.dat
input.txtファイルのRSA署名を作ります(sign.datファイル)。秘密鍵のパスワードが必要です。

$ openssl rsautl -verify -in sign.dat -pubin -inkey rsapub.pem -out output.txt
RSA署名の確認をします。署名が正しければ、出力ファイルoutput.txtがinput.txtと同じになります。

署名を作る場合、次のようにメッセージダイジェスト(md5やsha1)に対して署名を作るのが普通です。input.txtとsign.datのふたつを相手に渡します。

$ openssl dgst -md5 -sign identity.pem -out sign.dat input.txt
input.txtのmd5値の署名を作成します(sign.datファイル)。秘密鍵のパスワードが必要です。

openssl dgst -md5 -verify rsapub.pem -signature sign.dat input.txt
署名を確認します。正しい署名の場合、"Verified OK"の出力がでます。



* CA(認証局)関連
================
拡張子
.priv: RSAの秘密鍵
.crt: 証明書(X509のPEM encoded)
.csr: 署名要求 (PEM-encoded X.509 Certificate Signing Request)

root CAは自分自身で署名して証明書を発行する。
$ openssl genrsa -out ca.priv (パスフレーズ入力)
$ openssl req -key ca.priv -new -x509 -out ca.crt (self signed。国、所属、名前など入力)
(or
$ openssl req -key ca.priv -new -out ca.csr
$ openssl x509 -req -signkey ca.priv -in ca.csr -out ca.crt)

root CAからサーバへの証明書発行
$ openssl genrsa -out server.priv
$ openssl req -key server.priv -new -out server.csr
$ openssl x509 -CA ca.crt -CAkey ca.priv -req -in server.csr -out server.crt -CAcreateserial
(-CAcreateserialにより、ca.srlファイルが作成される)



* フォーマット変換
===================
$ openssl x509 -outform DER -in cacert.pem -out cacert.der
CA証明書をPEMからDER(Distinguished Encoding Rules)フォーマットに。

$ openssl crl2pkcs7 -certfile cert.pem -out cert.pk7 -nocrl
X509(PEM)からpkcs#7フォーマットに(CRLがある場合、-inでファイルを指定)


** openssl pkcs12コマンドは、他ツール(OutlookやNetscape)と相性がよい。
-exportオプションは、pkcs12ファイル作成を意味する(無い場合、パースを意味する)


MS Outlook ExpressでS/MIMEメールを送る手順
[1. ca.crtをインポート(信頼されたルート証明機関、もしくは中間機関のどちらかを選択)]
2. openssl pkcs12 -export -out my.pfx -inkey my.priv -name "inoue" -in my.crt
3. my.pfxをインポート

* 本当はpkcs#12であって、pfxフォーマットではない。
* .crtは証明機関や他人の証明書と見なされる。
* .pfxは個人の証明書と見なされる。
* [注意] メールアドレスが同じでないと署名に使えない。


Outlookのアドレス帳にインポートするにはDER形式にする(Netscapeも同じ。see ldap)
$ openssl x509 -outform DER -in my.crt -out mycrt.der



* その他
========
$ openssl enc -base64 > data < data.out
$ openssl enc -base64 -in data -out data.out
単なるbase64エンコーディング。
-dで逆。

$ openssl enc -rc5 -pass pass:password > data < data.out
rc5の他にも、rc2、rc4、idea、des、castがある。
-dでdecrypt。

メッセージダイジェスト(ハッシュ値)
$ openssl dgst -md5 file.txt
($ md5sum file.txtと結果が同じになることを確認)

$ openssl dgst -sha1 file.txt


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.