プライマリ・コンテンツに移動
Java Platform, Standard Editionセキュリティ開発者ガイド
リリース9
E91919-01
次へ
目次
タイトルおよび著作権情報
はじめに
対象読者
ドキュメントのアクセシビリティについて
関連ドキュメント
表記規則
1
一般的なセキュリティ
Javaセキュリティの概要
Javaセキュリティの紹介
Java言語セキュリティおよびバイト・コード検証
基本的なセキュリティ・アーキテクチャ
セキュリティ・プロバイダ
ファイルの場所
Javaの暗号化
公開鍵インフラストラクチャ
鍵および証明書ストレージ
公開鍵インフラストラクチャのツール
認証
セキュアな通信
SSL、TLSおよびDTLSプロトコル
Simple Authentication and Security Layer(SASL)
Generic Security Service APIとKerberos
アクセス制御
アクセス権
セキュリティ・ポリシー
アクセス制御の実施
XML署名
Javaセキュリティに関する追加情報
Javaセキュリティ・クラスのサマリー
削除対象としてマークされている推奨されていないセキュリティAPI
セキュリティ・ツールのサマリー
組込みのプロバイダ
セキュリティ・アーキテクチャ
標準アルゴリズム名
Java Development Kit
(
JDK
)でのアクセス権
アクセス権の説明とリスク
NIO-Related Targets
メソッドおよび必要なアクセス権
java.lang.SecurityManagerメソッドのアクセス権チェック
デフォルトのPolicyの実装とポリシー・ファイルの構文
デフォルトのPolicyの実装
ポリシー・ファイルのデフォルトの場所
Policyの実装の変更
ポリシー・ファイルの構文
キーストア・エントリ
付与エントリ
SignedBy、Principal、およびCodeBaseフィールド
キーストア別名の置換
アクセス権エントリ
Windowsシステムでのファイル・パスの指定
ポリシー・ファイルの例
ポリシー・ファイルでのプロパティの展開
Windowsシステム、ファイル・パス、およびプロパティの展開
パス名正規化
ポリシー・ファイルでの一般的な展開
特権ブロックのためのAPI
doPrivileged APIの使用
戻り値がなく、例外がスローされない場合
値を返す場合
ローカル変数にアクセスする場合
例外の処理
特権のサブセットのアサーション
最小特権
追加特権
特権コードを使う意味
リフレクション
セキュリティのトラブルシューティング
2
Java暗号化アーキテクチャ(JCA)リファレンス・ガイド
Java暗号化アーキテクチャの概要
JCAの設計の原則
プロバイダ・アーキテクチャ
暗号化サービス・プロバイダ
プロバイダの実際の実装方法
キーストア
エンジン・クラスとアルゴリズム
コア・クラスとインタフェース
Providerクラス
プロバイダ実装の要求および獲得方法
プロバイダのインストール
Providerクラス・メソッド
Securityクラス
プロバイダの管理
セキュリティ・プロパティ
SecureRandomクラス
SecureRandomオブジェクトの作成
SecureRandomオブジェクトのシードまたは再シード
SecureRandomオブジェクトの使用
シード・バイトの生成
MessageDigestクラス
MessageDigestオブジェクトの作成
メッセージ・ダイジェスト・オブジェクトのアップデート
ダイジェストの計算
Signatureクラス
Signatureオブジェクトの状態
Signatureオブジェクトの作成
Signatureオブジェクトの初期化
Signatureオブジェクトによる署名
Signatureオブジェクトによる検証
Cipherクラス
Cipherベースのその他のクラス
Cipher Streamクラス
SealedObjectクラス
Macクラス
Keyインタフェース
KeyPairクラス
鍵仕様のインタフェースおよびクラス
KeySpecインタフェース
KeySpecサブインタフェース
EncodedKeySpecクラス
PKCS8EncodedKeySpecクラス
X509EncodedKeySpecクラス
ジェネレータとファクトリ
KeyFactoryクラス
SecretKeyFactoryクラス
KeyPairGeneratorクラス
KeyGeneratorクラス
KeyAgreementクラス
鍵の管理
KeyStoreクラス
アルゴリズム・パラメータのクラス
AlgorithmParameterSpecインタフェース
AlgorithmParametersクラス
AlgorithmParameterGeneratorクラス
CertificateFactoryクラス
SSL/TLS実装でのJCAの使用方法
暗号強度の構成
管轄ポリシー・ファイル形式
アプリケーションの暗号化制限の免責を取得する方法
標準名
アプリケーションのパッケージ化
その他のJCAコード・サンプル
MessageDigestオブジェクトの計算
鍵のペアの生成
生成された鍵を使った署名の生成および検証
鍵仕様およびKeyFactory
を使った署名の生成と検証
乱数の生成
2つの鍵の同一性の判定
Base64でエンコードされた証明書の読み取り
認証応答の解析
暗号化の使用
パスワードベース暗号化の使用
Diffie-Hellman鍵交換、AES/GCMおよびHMAC-SHA256のサンプル・プログラム
2つのパーティ間のDiffie-Hellman鍵交換
3つのパーティ間のDiffie-Hellman鍵交換
AES/GCMの例
HMAC-SHA256の例
3
Java暗号化アーキテクチャでのプロバイダの実装方法
このドキュメントの対象読者
用語に関する注記
プロバイダ実装の概要
エンジン・クラスおよび対応するService Provider Interfaceクラス
プロバイダの実装および統合までのステップ
ステップ1: サービス実装コードの記述
ステップ1.1: 暗号化実装のためのJCAプロバイダのその他の要件および推奨事項の検討
ステップ2: プロバイダの命名
ステップ3: プロバイダのサブクラスであるマスター・クラスの記述
ステップ3.1: Stringオブジェクトを使用してサービスを登録するプロバイダの作成
ステップ3.2: Provider.Serviceを使用するプロバイダの作成
ステップ3.3: Cipher実装のための追加情報の指定
ステップ4: プロバイダのモジュール宣言の作成
ステップ5: コードのコンパイル
ステップ6: JARファイルへのプロバイダの記述
ステップ7: JARファイルの署名(必要な場合)
ステップ7.1: コード署名証明書の取得
ステップ7.2: プロバイダの署名
ステップ8: テストの準備
ステップ8.1: プロバイダの構成
ステップ8.2: プロバイダ・アクセス権の設定
ステップ9: テスト・プログラムの記述とコンパイル
ステップ10: テスト・プログラムの実行
ステップ11: 米国政府による輸出承認の申請(必要な場合)
ステップ12: プロバイダおよびそのサポート対象サービスのドキュメント化
ステップ12.1: 実装をメッセージ・ダイジェストとMAC用に複製可能かどうかの指定
ステップ13: クラス・ファイルおよびドキュメントをクライアントから利用可能にする
実装の詳細および要件
別名
サービスの相互依存性
デフォルトの初期化
デフォルトの鍵ペア・ジェネレータのパラメータの要件
Provider.Serviceクラス
署名フォーマット
DSAインタフェースおよびその実装要件
RSAインタフェースおよびその実装要件
Diffie-Hellmanインタフェースおよびその実装要件
その他のアルゴリズム型用インタフェース
アルゴリズム・パラメータの仕様のインタフェースおよびクラス
鍵ファクトリにより要求される鍵仕様のインタフェースおよびクラス
秘密鍵の生成
新規オブジェクト識別子の追加
エクスポート機能の保証
MyProviderのサンプル・コード
4
JDKプロバイダ・ドキュメント
JDKプロバイダの概要
暗号化アルゴリズムの輸入制限
暗号の変換
SecureRandom実装
SunPKCS11プロバイダ
SUNプロバイダ
SunRsaSignプロバイダ
SunJSSEプロバイダ
SunJCEプロバイダ
SunJGSSプロバイダ
SunSASLプロバイダ
XMLDSigプロバイダ
SunPCSCプロバイダ
SunMSCAPIプロバイダ
SunECプロバイダ
OracleUcryptoプロバイダ
Appleプロバイダ
JdkLDAPプロバイダ
JdkSASLプロバイダ
5
PKCS#11リファレンス・ガイド
SunPKCS11プロバイダ
SunPKCS11の要件
SunPKCS11の構成
Network Security Services (NSS)へのアクセス
PKCS#11のトラブルシューティング
PKCS#11プロバイダまたは個々のPKCS#11メカニズム(あるいはその両方)の無効化
アプリケーション開発者
トークン・ログイン
トークン鍵
プロバイダの遅延選択
JAAS KeyStoreLoginModule
JSSEキーストアおよびトラスト・ストアとしてのトークン
PKCS#11トークンとのkeytoolおよびjarsignerの使用
ポリシー・ツール
プロバイダ開発者
プロバイダ・サービス
パラメータ・サポート
SunPKCS11プロバイダでサポートされているアルゴリズム
SunPKCS11プロバイダのキーストアの要件
プロバイダの例
6
JAAS (Java Authentication and Authorization Service)
JAASリファレンス・ガイド
JAASチュートリアル
Java Authentication and Authorization Service (JAAS): LoginModule開発者ガイド
LoginModuleの概要
LoginModule
の実装手順
ステップ1: 認証技術の理解
ステップ2: LoginModule実装への命名
ステップ3: 抽象LoginModuleメソッドの実装
ステップ4: サンプル・アプリケーションの選択または記述
ステップ5: LoginModuleおよびアプリケーションのコンパイル
ステップ6: テストの準備
ステップ7: LoginModule
の試用
ステップ8: LoginModule実装のドキュメント化
ステップ9: LoginModule JARファイルおよびドキュメントの有効化
7
Java Generic Security Services (Java GSS-API)
Kerberosを使ったJava GSS-APIおよびJAASのチュートリアル
Kerberosを使ったJavaのシングル・サインオン
Java GSSの高度なセキュリティ・プログラミング
Kerberos 5 GSS-APIメカニズム
8
Java Secure Socket Extension (JSSE)リファレンス・ガイド
JSSEの概要
JSSEの特長と利点
JSSE標準API
SunJSSEプロバイダ
JSSE関連ドキュメント
用語と定義
Secure Sockets Layer (SSL)プロトコルの概要
SSLを使用することの利点
SSLの仕組み
暗号化処理
秘密鍵暗号化
公開鍵暗号化
秘密鍵暗号化と公開鍵暗号化の比較
公開鍵証明書
暗号化ハッシュ関数
メッセージ認証コード
デジタル署名
SSLハンドシェーク
SSLプロトコル
ハンドシェークの再実行(再ネゴシエーション)
符号化方式の選択とリモート・エンティティの検証
クライアント主導型OCSPとOCSPステープリング
クライアント主導型OCSPと証明書失効
クライアント主導型OCSPを使用するためのJavaクライアントの設定
OCSPステープリングと証明書失効
OCSPステープリングを使用するためのJavaクライアントの設定
OCSPステープリングを使用するためのJavaサーバーの設定
OCSPステープリングの構成プロパティ
JSSEクラスとインタフェース
JSSEのコア・クラスとインタフェース
SocketFactoryおよびServerSocketFactoryクラス
SSLSocketFactoryおよびSSLServerSocketFactoryクラス
SSLSocketFactoryの取得
SSLSocketおよびSSLServerSocketクラス
SSLSocketの取得
SSLEngineクラス
SSLEngineオブジェクトの作成
SSL/TLSデータの生成と処理
Datagram Transport Layer Security (DTLS)プロトコル
DTLSハンドシェーク
DTLS接続での再送信の処理
DTLSのためのSSLEngineオブジェクトの作成
DTLSデータの生成と処理
SSLEngineの操作のステータスについて
ブロック・タスクの処理
SSL/TLS/DTLS接続の停止
SSLSessionとExtendedSSLSession
HttpsURLConnectionクラス
割当て済のSSLSocketFactoryの設定
割当て済のHostnameVerifierの設定
サポート・クラスとインタフェース
SSLContextクラス
SSLContextクラスの取得と初期化
SSLContextオブジェクトの作成
TrustManagerインタフェース
TrustManagerFactoryクラス
TrustManagerFactoryの作成
PKIX TrustManagerのサポート
X509TrustManagerインタフェース
X509TrustManagerの作成
独自のX509TrustManagerの作成
keyStoreの動的更新
X509ExtendedTrustManagerクラス
X509ExtendedTrustManagerの作成
独自のX509ExtendedTrustManagerの作成
KeyManagerインタフェース
KeyManagerFactoryクラス
KeyManagerFactoryの作成
X509KeyManagerインタフェース
X509KeyManagerの作成
独自のX509KeyManagerの作成
X509ExtendedKeyManagerクラス
TrustManagerとKeyManagerの関係
二次サポート・クラスおよびインタフェース
SSLParametersクラス
暗号化方式群の優先順位
SSLSessionContextインタフェース
SSLSessionBindingListenerインタフェース
SSLSessionBindingEventクラス
HandShakeCompletedListenerインタフェース
HandShakeCompletedEventクラス
HostnameVerifierインタフェース
X509Certificateクラス
AlgorithmConstraintsインタフェース
StandardConstantsクラス
SNIServerNameクラス
SNIMatcherクラス
SNIHostNameクラス
JSSEのカスタマイズ
java.lang.Systemプロパティの指定方法
java.security.Securityプロパティの指定方法
X509証明書実装のカスタマイズ
HTTPSプロトコルの代替実装の指定
プロバイダ実装のカスタマイズ
暗号化プロバイダの静的な登録
暗号化サービス・プロバイダを動的に登録する
プロバイダ構成
特定の複数のアルゴリズムのための推奨プロバイダの構成
デフォルトのキーストアとトラストストア、ストア・タイプおよびストア・パスワードのカスタマイズ
デフォルトのキー・マネージャおよびトラスト・マネージャのカスタマイズ
無効化された制限付き暗号化アルゴリズム
暗号化アルゴリズム・プロバイダのカスタマイズ
エフェメラルDiffie-Hellman鍵のサイズのカスタマイズ
最大断片長ネゴシエーション(MFLN)拡張のカスタマイズ
最大および最小パケット・サイズの構成
Transport Layer Security (TLS)再ネゴシエーションの問題
この問題を解決するためのフェーズ別アプローチ
フェーズ2修正の説明
SSL/TLS再ネゴシエーションに対する回避方法と代替方法
TLS実装の詳細
フェーズ1修正の説明
SSL/TLS再ネゴシエーションにおける安全でないサーバー証明書変更の許可
ハードウェア高速化およびスマート・カードのサポート
スマートカードをキーストアおよびトラストストアとして使用するためのJSSEの構成
複数の動的キーストア
Kerberos暗号化方式群
Kerberos要件
ピアのアイデンティティ情報
セキュリティ・マネージャ
その他のキーストア形式(PKCS12)
Server Name Indication (SNI)拡張
TLSのアプリケーション層プロトコル・ネゴシエーション
クライアントでのALPNの設定
サーバーでのデフォルトALPNの設定
サーバーでのカスタムALPNの設定
ハンドシェーク中のネゴシエーション済ALPN値の特定
ALPN関連のクラスとメソッド
JSSEのトラブルシューティング
構成の問題
ハンドシェーク時のCertificateException
実行時例外: SSL Service Not Available
実行時例外: "No available certificate corresponding to the SSL cipher suites which are enabled"
実行時例外: No Cipher Suites in Common
ClientHelloメッセージの送信後ソケットが切断される
必要なアルゴリズムをサポートするJCAプロバイダをSunJSSEが見つけられず、NoSuchAlgorithmExceptionが発生する
WebサーバーからSSLでアプリケーション・リソースを取得しようとするとFailedDownloadExceptionがスローされる
RC4暗号化方式群がDTLS用に構成されている場合のIllegalArgumentException
デバッグ・ユーティリティ
SSL/TLS接続のデバッグ
コード例
セキュアでないソケットからセキュアなソケットへの変換
JSSEサンプル・コードの実行
JSSEで使用するキーストアの作成
Server Name Indication (SNI)拡張の使用
一般的なクライアント側使用例
一般的なサーバー側使用例
仮想インフラストラクチャの操作
標準名
プロバイダのプラグイン可能性
JSSE暗号化方式群のパラメータ
9
Java PKIプログラマーズ・ガイド
PKIプログラマーズ・ガイドの概要
公開鍵証明書の概要
X.509証明書と証明書失効リスト(CRL)
コア・クラスとインタフェース
基本のCertification Pathクラス
CertPathクラス
CertificateFactoryクラス
CertPathParametersインタフェース
Certification Path検証クラス
CertPathValidatorクラス
CertPathValidatorResultインタフェース
Certification Path構築クラス
CertPathBuilderクラス
CertPathBuilderResultインタフェース
証明書/CRLストレージ・クラス
CertStoreクラス
CertStoreParametersインタフェース
CertSelectorおよびCRLSelectorインタフェース
X509CertSelectorクラス
X509CRLSelectorクラス
PKIXクラス
TrustAnchorクラス
PKIXParametersクラス
PKIXCertPathValidatorResultクラス
PolicyNodeインタフェースおよびPolicyQualifierInfoクラス
PKIXBuilderParametersクラス
PKIXCertPathBuilderResultクラス
PKIXCertPathCheckerクラス
証明書パス検証でのPKIXCertPathCheckerの使用
PKIXRevocationCheckerクラスを使った証明書の失効ステータスのチェック
サービス・プロバイダの実装
プロバイダの実装および統合までのステップ
サービスの相互依存性
証明書パス・パラメータ仕様のインタフェース
証明書パスの結果の仕様インタフェース
証明書パスの例外クラス
付録A: 標準名
付録B: SUNプロバイダでのCertPath実装
付録C: OCSPサポート
付録D: JdkLDAPプロバイダでのCertPath実装
付録E: 暗号化アルゴリズムの無効化
10
Java SASL APIプログラミングおよび配備ガイド
Java SASL APIの概要
メカニズムの作成
メカニズムに入力を渡す
メカニズムの使用
ネゴシエーション済みのセキュリティ層の使用
SASLメカニズムをインストールおよび選択する方法
SunSASLプロバイダ
SunSASLプロバイダのクライアント・メカニズム
SunSASLプロバイダのサーバー・メカニズム
デバッグおよびモニタリング
JdkSASLプロバイダ
JdkSASLプロバイダのクライアント・メカニズム
JdkSASLプロバイダのサーバー・メカニズム
SASLセキュリティ・プロバイダの実装
11
XMLデジタル署名
Java XMLデジタル署名API仕様
謝辞
要件
APIの依存性
目標にしない事項
パッケージの概要
サービス・プロバイダ
DOMメカニズムの要件
オープンAPIの問題
プログラミング例
XMLデジタル署名APIの概要とチュートリアル
パッケージ階層
サービス・プロバイダ
XML署名について
XML署名の例
XMLデジタル署名APIの例
検証の例
XML署名の検証
署名を含むドキュメントのインスタンス化
検証する署名要素の指定
検証コンテキストの作成
XML署名のアンマーシャリング
XML署名の検証
KeySelectorの使用
GenEnvelopedの例
XML署名の生成
署名するドキュメントのインスタンス化
公開鍵のペアの作成
署名コンテキストの作成
XML署名の構築
XML署名の生成
生成されるドキュメントの印刷または表示
12
セキュリティAPIの仕様
13
削除対象としてマークされている推奨されていないセキュリティAPI
14
セキュリティ・ツール
15
セキュリティのチュートリアル