2016-03-21 11 views
0

私はJavaセキュリティポリシーを取得しようとしています。私のコードは、login.salesforce.comxx99.salesforce.comの両方に解決して接続する必要があります。ここで、xx99は約100種類の値のいずれかを取ることができます。java.net.SocketPermissionの奇数ワイルドカード動作

特定のホストをハードコードすると機能します。

permission java.net.SocketPermission "login.salesforce.com:443", "connect, resolve"; 
permission java.net.SocketPermission "na30.salesforce.com:443", "connect, resolve"; 

しかし、これはすべての可能性をカバーするために私のセキュリティポリシーファイルに100のエントリについての追加私につながる、とSalesforceはメンテナンスに悪夢を作り、新しいインスタンスのすべての時間を追加します。

私は任意のホスト/ポートをワイルドカードならばそれは動作します:

permission java.net.SocketPermission "*", "connect, resolve"; 

しかし、明白な答えが失敗した - この

permission java.net.SocketPermission "*.salesforce.com:443", "connect, resolve"; 

は私に

は、いくつかのために、このを見つめてき

2016-03-20 22:19:56,024 [user:*admin] [pipeline:Pipeline1] [thread:preview-pool-1-thread-1] WARN Pipeline - Stage 'com_streamsets_stage_destination_waveanalytics_WaveAnalyticsDTarget_1' initialization error: java.security.AccessControlException: access denied ("java.net.SocketPermission" "login.salesforce.com:443" "connect,resolve") 
java.security.AccessControlException: access denied ("java.net.SocketPermission" "login.salesforce.com:443" "connect,resolve") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) 
    at java.security.AccessController.checkPermission(AccessController.java:884) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:510) 
    ...etc... 
を与えます時間は今 - 私はそれを得ることはありません!

答えて

1

だからthis question正しい方向に私を導いた。 JDKのソースコードを実行すると、ホスト名が解決され、逆引き参照が行われ、スプーフィングを防ぐためのチェックが行われます。

$ nslookup 136.147.59.44 
Server:  192.168.69.1 
Address: 192.168.69.1#53 

Non-authoritative answer: 
44.59.147.136.in-addr.arpa name = dcl7-dfw.login-dfw.salesforce.com. 

Authoritative answers can be found from: 

えっ - [OK]を、のは、そのホスト名を解決しましょう: - さんは、その最初のIPアドレスを逆引き参照をやらせる

$ dig login.salesforce.com 

; <<>> DiG 9.8.3-P1 <<>> login.salesforce.com 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28719 
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0 

;; QUESTION SECTION: 
;login.salesforce.com.  IN A 

;; ANSWER SECTION: 
login.salesforce.com. 2288 IN CNAME login.gslb2.salesforce.com. 
login.gslb2.salesforce.com. 57 IN A 136.147.59.44 
login.gslb2.salesforce.com. 57 IN A 136.147.57.172 
login.gslb2.salesforce.com. 57 IN A 136.147.58.44 
login.gslb2.salesforce.com. 57 IN A 136.147.58.172 

OK:問題はのはlogin.salesforce.comを解決しましょうlogin.salesforce.com ...

です:この時点で

$ dig dcl7-dfw.login-dfw.salesforce.com 

; <<>> DiG 9.8.3-P1 <<>> dcl7-dfw.login-dfw.salesforce.com 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 26165 
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 

;; QUESTION SECTION: 
;dcl7-dfw.login-dfw.salesforce.com. IN A 

;; Query time: 35 msec 
;; SERVER: 192.168.69.1#53(192.168.69.1) 
;; WHEN: Thu Apr 28 13:25:56 2016 
;; MSG SIZE rcvd: 51 

、JDKはトンを比較しようとします彼はワイルドカードポリシー(*.salesforce.com)に対してIPアドレス(136.147.59.44)を保持しており、それが一致しないと判断することは間違いありません。

私はポリシーで「*」がついています。