В программном обеспечении для клиента мы должны прочитать данные URL для анализа их содержимого. Также клиенту необходимо активировать Tomcat-Security-Manager, чтобы позволить Java-политикам контролировать, что делает программа.
Теперь, при чтении URL-адресов исключение "javax.net.ssl.SSLKeyException: секретная ошибка RSA premaster" происходит, но только при определенных условиях:
- если URL-адрес HTTPS, но не для HTTP
- если активирован Security-Manager, а не когда он деактивирован или если в глобальном грантовом блоке установлен AllPermission
- только с Java 6, а не с Java 7 (заказчику в настоящее время требуется Java 6)
- только с Tomcat6, а не с Tomcat 7 (заказчику в настоящий момент нужен Tomcat 6)
Нарушение безопасности происходит где-то в Java-коде, AllPermission, ограниченный нашей кодовой базой, не мешает ошибке.
Итак, есть ли у кого-то идея, какое разрешение установить для Java 6, чтобы она могла обрабатывать HTTPS?
Дополнительная информация: он работает внутри tomcat, на Debian-Linux с OpenJDK.
EDIT: я добавил Java-Param "-Djava.security.debug = доступ, сбой" к Tomcats/etc/default/tomcat6 в переменной JAVA_OPTS. Но в журналах у меня нет дополнительных сообщений. Возможно ли, что код запрашивает разрешения перед их запуском?
EDIT2: я нашел правильное место и получил полный стек (удалены конкретные части клиента):
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
EDIT3: До сих пор я был в предположении, что URL-адрес Java-класса использовался для доступа к содержимому ресурса. Но это неверно. Он использует от Grails-Code объект Groovy -URL с методом getText():
new URL(params.url).text
Ошибка в этой строке. Это Grails-версия 2.2.4.