|
Javaには様々なセキュリティ関係の機能が用意されています。
ここでは、その原理ではなく環境と利用方法などについてまとめてみようかどうしようかというところです。
公開鍵、秘密鍵、SSL、SSHなど ->[PKI]
keytoolやjarsignerというツールがありますが。
最初にkeystoreという格納ファイルを使って管理します。
keytool -genkey -keystore myKeyStore -alias duke -keyalg RSA
-validity 90 など付けると自己署名証明書の期限を変更できます。これで、myKeyStoreというファイルにdukeのkeyが作られます。
ちなみに、keytoolでは秘密鍵をとりだしたり署名すことができません・・・。少々コードを書けば秘密鍵を取り出すことはできます。
次に、証明書を作ります。証明書はVeriSignなどで発行されるので、証明書署名要求ファイル(csr)なるものを作ります。
keytool -selfcert -alias duke -keystore myKeyStore
証明書は、信頼できる団体などが、そのkey(秘密鍵)の利用者が正しい(企業や住所が存在する)ということを証明するものです。
keystoreから取り出したPKCS8な秘密鍵(バイナリ)をテキスト型にする
これは、ツールつくりました。java-houseのを参考に秘密鍵を取り出した場合に元の鍵は、
openssl pkcs8 -in ファイル名.key -inform der -nocrypt -outform pem
でx.509形式に変換できたりします。
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
と書かれています。
BASE64でエンコードするだけでもApacheでは使えました。その場合は、
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
を頭と尻尾につけるとPKCS#8形式の秘密鍵として認識してくれます。
連鎖型のCA証明書もPKCS#7形式で出力したものをBASE64で変換したものが使えます。
-----BEGIN PKCS7-----
-----END PKCS7-----
をつけるだけ。
単体の証明書は、
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
です。X.509形式?
これを複数寄せ集めてもApacheで連鎖型の証明書として使えます。
参考
JSSEあたりから見ていけばいいでしょうか
参考
暗号方式(アルゴリズム)、鍵、ダイジェスト、署名と検証などを扱うセキュリティの基本的な機能。
調べます。
Java Secure Socket Extension
調査中 SSLやTLSを実現できる。 httpsなどで使われているプロトコルですね。Socketを暗号化するためのものです。
ソフトウェアは非商用に利用できるらしい。 J2SE 1.4から標準で含まれています。サーバ側(SSLServerSocket)、クライアント側(SSLSocket?)などが使えるようになります。初期化の部分以外は、ふつうのSocketとおなじです。初期化に必要なものは、サーバ側では秘密鍵と証明書をおさめたkeystore、そのパスワードですかね。
接続するためには、サーバ側の証明書が信頼できるものである必要があります。
mozilla.org でもJavaのSSL実装をリリースしていたような気がしますが、どんな感じのものなのかな
認証と承認を実現するというもの
認証とは、誰であるかパスワードなどで確認することです。
承認とは、その人になにができるかのアクセス制限をすることです。
参考