ddy*_*yer 7 java sockets security
以前工作的网络代码正在投入java.security.AccessControlException
一个完全沙盒化的Java applet
.
Can't get socket 2255: java.security.AccessControlException: access denied ("java.net.SocketPermission" "50.31.1.13:2255" "connect,resolve")
Run Code Online (Sandbox Code Playgroud)
Oracle改变了什么 - 必须跳出哪些新的安全环以保持套接字工作?
这在Java 1.7.0_55和所有以前版本的java中都有效.
Hol*_*ger 10
这确实发生了变化......来自文档
http://docs.oracle.com/javase/8/docs/technotes/guides/jweb/enhancements-8.html
对于沙盒RIA,
URLPermission
现在用于允许连接返回到启动它们的服务器.URLPermissions
基于代码源的协议,主机和端口授予.此更改具有以下含义:
- 对于沙盒RIA,
SocketPermissions
不再授予源主机.从SocketPermissions
JDK 8开始,不会从JavaScript代码到RIA的调用....
换句话说,您无法再Socket
在沙箱中创建新内容.您只能URL
使用完全沙盒的applet使用与代码库相同的主机,相同端口和相同的协议创建.
除非Oracle改变主意,否则沙盒applet无法解决这个问题(否则会导致整个安全概念被破坏).
嗯,对我来说,甲骨文决定加强小程序的安全要求。这是我在CodeRanch上找到的:
进行SecurityManager
accept套接字相关的权限检查:
System.getSecurityManager().checkPermission(new SocketPermission("50.31.1.13:2255", "accept, connect, listen"));
//I used IP address from your exception
Run Code Online (Sandbox Code Playgroud)
现在,与线程相关的检查:
System.getSecurityManager().checkPermission(new RuntimePermission("readerThread"));
Run Code Online (Sandbox Code Playgroud)
这些行应该放在main()
方法的开头。
需要做的第二件事是签署您的jar/war/ear
文件。首先,创建一个密钥库:
keytool -genkey -alias philip -keystore keystore
Run Code Online (Sandbox Code Playgroud)
现在,将 CA 签名的信任库证书放入其中或创建自签名证书:
keytool -selfcert -alias philip -keystore keystore
Run Code Online (Sandbox Code Playgroud)
最后,签署文件:
jarsigner -keystore keystore -signedjar WhatYouWantTheSignedJarToBeNamed.jar ThePreviousJARYouCreated.jar philip
Run Code Online (Sandbox Code Playgroud)
实际上,对于签名JAR
文件来说SecurityManager
,与 - 相关的魔法可能是一种开销,但在我看来,两者都做更安全。
另请注意,有时您可能需要签署外部jar
文件,而不仅仅是jar
您的小程序所在的位置。
归档时间: |
|
查看次数: |
6436 次 |
最近记录: |