Прежде чем начать, я должен сказать, что я уже размещал этот вопрос на Код Ранчо, и пока не получили ответа. Я прослежу, чтобы и этот сайт, и Code Ranch получили ответ, если я его найду ...
Я унаследовал старое приложение, написанное на EJB, работающее на JRun4. JRun4 обслуживает контент - это означает, что перед ним нет Apache, IIS и т.п. Приложение используется только для внутреннего использования и вообще не видно снаружи брандмауэра. Веб-контент содержит идентифицируемую информацию, поэтому мы пытаемся заставить приложение использовать SSL.
Внутри моей организации мы используем службы сертификатов Active Directory только для внутренних приложений, и у нас есть внутренний сертификат подписи, который распространяется на все рабочие станции, который также используется для подписи всех внутренних запросов на подпись. Очевидно, что этот подписывающий сертификат не является частью цепочки доверия Java. У меня нет доступа к ключу подписи, поэтому я как можно лучше эмулирую OpenSSL. Идея состоит в том, чтобы создать центр подписи и заставить его работать с JRun4. Поскольку я полностью контролирую цепочку, я могу быстро экспериментировать, чтобы увидеть, что работает.
Мне не удалось обойтись без сообщения «Узел не аутентифицирован». Насколько я понимаю, сообщение об ошибке возникает, когда Java не может найти открытый ключ CA. Тем не менее, я добавил его во все возможные места, но все равно получаю сообщение об ошибке.
Вот мои шаги, учитывая, что я просто пытаюсь понять, как заставить это работать, поэтому я знаю, что делать на рабочем сервере:
1) Я скомпилировал OpenSSL 1.0.1j из исходников с помощью MinGW.
2) Я использовал конфигурацию и шаги из ssl - https://stackoverflow.com/questions/21297139/how-do-you-sign-openssl-certificate-signing-requests-with-your-certification-aut для создания CA.
3) CA находится на отдельном устройстве, на котором я запускаю JRun.
4) Я скопировал JRun, но не установил его, на рабочую станцию в C: \ JRun4.
5) Java 6 установлена в папке C: \ Programs \ jdk1.6.0 на моей рабочей станции. (Примечание: я не могу заставить JRun работать с новыми версиями Java, он жалуется на jvm.dll)
6) Я создал новое хранилище ключей в C: \ JRun4 \ lib с паролем changeit.
7) Я создал запрос на подпись из этого хранилища ключей.
8) Я скопировал .csr на другую рабочую станцию и подписал его.
9) Я скопировал подписанный ключ и ключ CA с другой рабочей станции обратно на рабочую станцию JRun.
10) Сначала я импортировал ключ CA в четыре места - C: \ Programs \ jdk1.6.0 \ lib \ security \ cacerts, C: \ Programs \ jdk1.6.0 \ jre \ lib \ security \ cacerts, C: \ JRun4 \ lib \ keystore и C: \ JRun4 \ lib \ trustStore.
11) Я импортировал подписанный ключ в C: \ JRun4 \ lib \ keystore, после чего SSL запустился без ошибок, но я получил ошибку «Peer notauthenticated».
12) В отчаянии я скопировал подписанный ключ в три других места, хотя был уверен, что это не поможет.
Что мне не хватает?
Не стесняйтесь спрашивать подробности, я не хотел увязать и без того длинный пост с большим количеством нерелевантных данных.