Java signed applet
を作成しました。Java(JRE 8)セキュリティレベルを設定すると完全に実行されます。 )highそして私のsite url in exception site list 。
しかし、例外サイトリストにサイトURLを追加しない場合、Javaセキュリティ例外はここで説明されているようになります: 例外サイトリストにURLを追加
サードパーティの証明書を使用して、署名されたアプレットを作成しました。
署名付きアプレットを作成した後のマニフェストファイルは次のとおりです。
これらのセキュリティブロックポップアップを回避する署名付きアプレットまたはスクリプトの作成中にマニフェストファイルに変更を追加することで利用できるオプションはありますかJavaコードなしでこれらのポップアップを回避する例外サイトリストにサイトのURLを追加しますか?
または、本当にJavaから必須であり、このようなブロックを回避するために例外サイトリストにサイトのURLを追加する必要がありますエラー。
基本的に、マニフェストファイルまたは任意のJavaコード?を介して例外サイトリストにURLを追加するために利用できるオプションはありますか?
署名付き証明書を使用してアプレットに署名する場合は必須ですか?コード署名証明書である必要がありますか?ワイルドカードまたはSSL証明書は機能しませんか?
ワイルドカード証明書を使用してアプレットに署名しましたが、自己署名アプレットブロックの問題が発生しています。
アプリケーションは、コード署名を目的としていない証明書で署名したため、自己署名されていると見なされます。自己署名アプリケーションは、この厄介なポップアップでブロックされます。
信頼できる認証局によって署名されたコード署名証明書を使用して署名する場合は、このポップアップを防ぐことができます。次に、ユーザーは、アプリケーションの発行者としての名前を一覧表示する、見栄えのよい確認ダイアログを表示します。
ダイアログの説明と、ダイアログが表示される理由とタイミングについては、 セキュリティダイアログ に関するOracleのドキュメントも参照してください。
アプレットに署名するためのコード署名証明書を作成する方法については、 署名付きRIAの操作 、特に23.2「署名RIA」のドキュメントを参照してください。
2番目のニースリンクは http://www.Oracle.com/technetwork/Java/javase/tech/Java-code-signing-1915323.html#5
- 更新 -
証明書をコード署名証明書にする正確な理由は何ですか?
X.509証明書には、キー使用フィールド(KU)および 拡張キー使用フィールド (EKU)が含まれる場合があります。これらのフィールドが存在する場合、restrict証明書の有効な使用法。 Javaプラグインは、これらのフィールドの存在をチェックします。
このチェックを実行する EndEntityChecker のソースコードを見つけました。
/**
* Check whether this certificate can be used for code signing.
* @throws CertificateException if not.
*/
private void checkCodeSigning(X509Certificate cert)
throws CertificateException {
Set<String> exts = getCriticalExtensions(cert);
if (checkKeyUsage(cert, KU_SIGNATURE) == false) {
throw new ValidatorException
("KeyUsage does not allow digital signatures",
ValidatorException.T_EE_EXTENSIONS, cert);
}
if (checkEKU(cert, exts, OID_EKU_CODE_SIGNING) == false) {
throw new ValidatorException
("Extended key usage does not permit use for code signing",
ValidatorException.T_EE_EXTENSIONS, cert);
}
[...]
checkRemainingExtensions(exts);
}
チェック方法は次のようになります。
/**
* Utility method checking if the extended key usage extension in
* certificate cert allows use for expectedEKU.
*/
private boolean checkEKU(X509Certificate cert, Set<String> exts,
String expectedEKU) throws CertificateException {
List<String> eku = cert.getExtendedKeyUsage();
if (eku == null) {
return true;
}
return eku.contains(expectedEKU) || eku.contains(OID_EKU_ANY_USAGE);
}
KUまたはEKUが指定されていない場合、KUまたはEKUチェッカーはtrueを返すことに注意してください。ただし、KUが指定されている場合は、デジタル署名KUがその1つである必要があります。同様に、EKUが指定されている場合、EKUコード署名(oid 1.3.6.1.5.5.7.3.3で識別)またはEKUany使用法(oid 2.5.29.37.0で識別)も指定する必要があります。
最後に、checkRemainingExtensions
メソッドは、他の関連する重要なEKUに遭遇すると失敗します。
したがって、ワイルドカードSSL証明書でコード署名ではないEKUが少なくとも1つ指定されているため、Javaプラグイン。
または、Javaから、このようなブロッキングエラーを回避するために、例外サイトリストにサイトのURLを追加する必要があることが本当に必須ですか。
基本的にはい。エンドユーザーはセキュリティポップアップを無効にすることができますが、アプリケーションを介して無効にすることはできません。 Oracleのドキュメントを見ると "セキュリティダイアログの回避" 。セキュリティポップアップは予想される動作であることが明確に示されています。
Javaランタイムは、セキュリティ上重要な問題の可能性についてユーザーに自動的に警告します。使用するアプリケーションが安全であると確信している場合は、セキュリティダイアログをバイパスしてユーザーエクスペリエンスを簡素化できます。 Java applet/webstartアプリケーションが署名されると、証明書のセキュリティ警告ダイアログボックスが表示されます。ユーザーは[実行]ボタンをクリックして、アプリケーションのコードにすべての権限を付与する必要があります。
また、ポップアップを回避するためのオプションを読むと、それらはすべてエンドユーザーのコンピューター上の何かを変更することを意味していることがわかります。
オプションは次のとおりです( "セキュリティダイアログの回避" から引用):
ユーザーは、アプリケーションの署名に使用された証明書を受け入れ、[常にこの発行元からのコンテンツを信頼する]チェックボックスをオンにします。その後、次回、このアプリケーションに自動的にアクセス許可が付与されます(証明書の有効期限が切れるまで、または信頼できるキーストアから削除されるまで)。
証明書は、JREの信頼できる証明書ストアに手動でインポートできます。 Javaコントロールパネルを使用して証明書をインポートするには、[セキュリティ]タブを選択し、[証明書]> [信頼できる証明書]を選択します。コマンドラインから証明書ストアに証明書をインポートするには、keytoolユーティリティ( JREのbinフォルダー)。
$ {user.home} /。Java.policyにあるJavaポリシーファイルでAllPermissionsを付与するか、AllPermissionsが含まれるJavaポリシーファイルをポイントします。 $(JRE_HOME)/lib/security/Java.securityファイル。アクセス許可は、すべてのアプリケーションに付与することも、特定のURLに制限することもできます。Java.policyの詳細については、デフォルトのポリシー実装とポリシーファイル構文を参照してください。
マニフェストを変更して、サーバー名をcaller-allowable-codebaseに追加してみてください。おそらく、サイトのURLを例外に追加する必要はもうありません
[〜#〜] update [〜#〜]:
これは私のmanisfestファイルの例です:
Manifest-Version: 1.0
Application-Library-Allowable-Codebase: *
Application-Name: myApp
Name: MyName
Permissions: all-permissions
Created-By: 1.7.0_51 (Oracle Corporation)
Caller-Allowable-Codebase: MyServerName
Codebase: *