しいしせねっと Amazon.co.jp アソシエイト
[技術資料室] [Java] [PKI] Get Firefox

Javaとセキュリティ

Javaには様々なセキュリティ関係の機能が用意されています。

ここでは、その原理ではなく環境と利用方法などについてまとめてみようかどうしようかというところです。

必要な基礎知識

公開鍵、秘密鍵、SSL、SSHなど ->[PKI]

keyと証明書

keytoolやjarsignerというツールがありますが。

最初にkeystoreという格納ファイルを使って管理します。

keytool -genkey -keystore myKeyStore -alias duke -keyalg RSA

これで、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で連鎖型の証明書として使えます。

参考

Javaの各種セキュリティ

JSSEあたりから見ていけばいいでしょうか

参考

JCA

暗号方式(アルゴリズム)、鍵、ダイジェスト、署名と検証などを扱うセキュリティの基本的な機能。

JCE

調べます。

JSSEについて

Java Secure Socket Extension

調査中 SSLやTLSを実現できる。 httpsなどで使われているプロトコルですね。Socketを暗号化するためのものです。
ソフトウェアは非商用に利用できるらしい。 J2SE 1.4から標準で含まれています。サーバ側(SSLServerSocket)、クライアント側(SSLSocket?)などが使えるようになります。初期化の部分以外は、ふつうのSocketとおなじです。初期化に必要なものは、サーバ側では秘密鍵と証明書をおさめたkeystore、そのパスワードですかね。

接続するためには、サーバ側の証明書が信頼できるものである必要があります。

mozilla.org でもJavaのSSL実装をリリースしていたような気がしますが、どんな感じのものなのかな

JAAS

認証と承認を実現するというもの

認証とは、誰であるかパスワードなどで確認することです。

承認とは、その人になにができるかのアクセス制限をすることです。

参考

[しいしせねっと] [技術資料室] [Java]