要设置哪个权限,以避免使用 https-URLS 的安全管理器出错?
在客户的软件中,我们必须读取给定的URL来解析其内容。此外,客户需要激活 Tomcat-Security-Manager,让 Java-Policies 控制程序的功能。
现在,通过读取URL,异常“javax.net.ssl.SSLKeyException:RSA premaster secret error”会发生,但仅限于某些条件:
- 如果 URL 是 HTTPS,但不是 HTTP
- 如果安全管理器已激活,而不是在停用时激活,或者在全局授权中阻止所有权限已设置
- 仅使用 Java 6,而不是 Java 7(客户目前需要 Java 6)
- 仅使用Tomcat6,而不是Tomcat 7(客户目前需要Tomcat 6)
安全违规发生在Java代码中的某个地方,仅限于我们的代码库的AllPermission并不能防止错误。
那么,有人有想法,为Java 6设置哪个权限,以便它可以处理HTTPS?
其他信息:它运行在tomcat中,在带有OpenJDK的Debian-Linux上。
编辑:我在变量JAVA_OPTS中将Java-Param“-Djava.security.debug=access,failure”添加到Tomcats /etc/default/tomcat6中。但是在日志中,我没有其他消息。代码是否有可能在触发权限之前询问权限?
编辑2:我找到了正确的地方,并得到了完整的堆栈跟踪(删除了特定的客户部件):
javax.net.ssl.SSLKeyException: RSA premaster secret error
at [...]
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at java.lang.Thread.run(Thread.java:701)
Caused by: java.security.NoSuchAlgorithmException: SunTlsRsaPremasterSecret KeyGenerator not available
at javax.crypto.KeyGenerator.<init>(KeyGenerator.java:141)
at javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:191)
... 14 more
编辑3:到目前为止,我假设Java类URL用于访问资源的内容。但这是不真实的。它使用来自Grails-Code的Groovy-URL-object和getText()-方法:
new URL(params.url).text
此行上发生错误。这是Grails版本2.2.4。