2016-10-25 11 views
0

カスタムチップで動作するように設計されたJavaアプリケーションの下にコード行があります。System.setPropertyとSecurity.setPropertyの相違点

System.setProperty("ssl.SocketFactory.provider", "some.custom.socketFactory"); 

私は「ssl.SocketFactory.providerは」java.security.Securityクラスに設定するプロパティであることを、インターネットから推測します。

セキュリティプロパティではなくシステムプロパティとして「ssl.SocketFactory.provider」を設定すると、肯定的または否定的な違いがあり、正しいと言えば、システムとセキュリティのサブセットまたはスーパーセットが混乱していますしたがって、 "ssl.SocketFactory.provider"プロパティが設定されている人は問題になりません。

PS: 1)チップ上のjavaアプリケーションはサーバー認証でサーバーとの通信に成功しましたが、更新されたサーバーからクライアント認証が要求されるとSSLContext(検証済みのTrust and Key Managerファクトリで初期化されます)サーバーIPとポートでソケットを作成できません。スレッドは.createSocket(IP、port)で永遠にブロックします。

2)私はインターネットで多くの検索をしましたが、これらのクラスの間にドットを結びつけることができませんでした。もし見つからなかったり、間違っていたら。

+0

ドキュメントは、セキュリティのプロパティを使用するように言うように見えるん。 'このメソッドが初めて呼び出されると、セキュリティプロパティ" ssl.SocketFactory.provider "が検査されます。「そうかもしれません。しかし、カスタムハードウェアを扱う際には、確かに分かりません。 https://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLSocketFactory.html#getDefault-- – markspace

答えて

4

Security.getPropertyとは、SecurityクラスにプライベートなPropertiesオブジェクトのプロパティを設定しています。

つまり、システムとセキュリティのサブセットまたはスーパーセットがあります。

ので、"ssl.SocketFactory.provider"プロパティが設定されている人には関係ありません。

重要です。


デフォルトのセキュリティプロパティは、Javaインストールのファイルからロードされます。すなわち"$JAVA_HOME/lib/security/java.security"ここで、$JAVA_HOME有効 java homeを示します。これらは、Systemプロパティの"java.security.properties"プロパティで指定されたプロパティファイルによって上書きできます。

したがって、システムプロパティ"ssl.SocketFactory.provider"を設定すると、が機能しません。しかし、あなたの場合:

  1. がそれに"ssl.SocketFactory.provider"プロパティを入れて、
  2. があなたのSystemプロパティにオーバーライドファイルに適切な"java.security.properties"参照元を追加し、セキュリティプロパティファイルを上書き作成します。例えば-Dコマンドラインオプションを使用します。

である必要があります。


(上記の詳細は、Java 8のソースコードを読んでから収集されている。実装は、他のバージョンでは異なる場合があります。)

関連する問題