在我开始之前,我应该说我已经在Code Ranch上发布了这个问题,还没有得到答案。 我会确保这个网站和代码牧场收到的答案,我应该find一个…
我inheritance了一个使用JRun4运行的EJB编写的旧应用程序。 JRun4提供内容 – 也就是说我们没有Apache,IIS或类似的东西。 该应用程序仅在内部使用,根本不可见于防火墙外部。 网页内容包含可识别的信息,所以我们试图让应用程序使用SSL。
在我的组织内部,我们使用Active Directory证书服务来处理仅限于内部的应用程序,并且我们有一个内部签名证书,分发给所有工作站,也用于签署所有内部签名请求。 很明显,这个签名证书不是Java信任链的一部分。 我无权访问签名密钥,因此我尽可能使用OpenSSL进行模拟。 这个想法是创build一个签名权限,并使之与JRun4一起工作。 由于我完全控制了链条,我可以快速试验看看有什么作用。
我没有能够通过“同行未经authentication”。 我的理解是错误消息是由于Java找不到CA公钥导致的。 但是,我已经把它添加到了每个我能想到的地方,而且我仍然得到了错误。
这里是我的步骤,铭记我只是想抓住如何让这个工作,所以我知道怎么做生产服务器上:
1)我使用MinGW从源代码编译OpenSSL 1.0.1j。
2)我使用的configuration和步骤从SSL – https://stackoverflow.com/questions/21297139/how-do-you-sign-openssl-certificate-signing-requests-with-your-certification-aut创build一个CA 。
3)CA与我运行JRun的地方在一个单独的设备上。
4)我有JRun复制 – 但没有安装 – 在C:\ JRun4工作站上。
5)Java 6安装在我的工作站上的C:\ Programs \ jdk1.6.0上。 (注意,我不能让JRun使用更新的Java版本,它抱怨jvm.dll)
6)我使用密码“changeit”在C:\ JRun4 \ lib中生成了一个新的密钥库。
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 not authenticated”错误。
12)无奈之下,我把签名的密钥复制到了其他三个地方,即使我确信这没有帮助。
我错过了什么?
请随时询问更多的细节,我不想陷入已经很长的post,有很多不相关的数据。