现在,在读取URL时,只有在特定条件下才会发生“javax.net.ssl.SSLKeyException: RSA premaster secret error”异常:
- 如果URL是HTTPS而不是HTTP
- 如果Security-Manager被激活,而不是在其被停用时或者在全局grant-Block中设置了AllPermission
- 只在Java 6下出现,而不是在Java 7下出现(客户目前需要Java 6)
- 只在Tomcat6下出现,而不是在Tomcat 7下出现(客户目前需要Tomcat 6)
那么,是否有人有想法,在Java 6中设置哪些权限可以处理HTTPS呢?
其他信息:它运行在Debian-Linux上的Tomcat内部,使用OpenJDK。
编辑:我在变量JAVA_OPTS中向Tomcat的/etc/default/tomcat6添加了Java参数“-Djava.security.debug=access,failure”。但是在日志中我没有得到额外的消息。可能代码在触发权限之前会询问它们吗?
编辑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用于访问资源的内容。但这是不正确的。它使用了Groovy-URL对象与getText()方法从Grails代码中:
new URL(params.url).text
错误发生在此行。它是Grails版本2.2.4。