在我开始之前,我应该说我已经在代码牧场,但尚未得到答复。如果我找到答案,我会确保此网站和 Code Ranch 都能收到答案……
我继承了一个用 EJB 编写的旧应用程序,该应用程序在 JRun4 上运行。JRun4 提供内容 - 也就是说,我们在其前面没有 Apache、IIS 或类似程序。该应用程序仅在内部使用,从防火墙外部根本看不到。Web 内容包含可识别信息,因此我们正尝试让该应用程序使用 SSL。
在我的组织内部,我们使用 Active Directory 证书服务来处理仅供内部使用的应用程序,并且我们有一个内部签名证书,该证书分发给所有工作站,还用于签署所有内部签名请求。显然,此签名证书不是 Java 信任链的一部分。我无法访问签名密钥,因此我尽可能使用 OpenSSL 进行模拟。我们的想法是创建一个签名机构并使其与 JRun4 一起工作。由于我可以完全控制该链,因此我可以快速进行实验以查看哪些方法有效。
我无法跳过“Peer not authenticated”。我的理解是,错误消息是由于 Java 找不到 CA 公钥而导致的。但是,我已将其添加到我能想到的每个地方,但仍然收到错误。
这是我的步骤,请记住,我只是试图弄清楚如何让它工作,以便我知道在生产服务器上该做什么:
1)我使用 MinGW 从源代码编译了 OpenSSL 1.0.1j。
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 not authenticated”的错误。
12) 无奈之下,我将签名的密钥复制到其他三个位置,尽管我非常确定这无济于事。
我错过了什么?
请随时询问更多详细信息,我不想让大量不相关的数据拖累已经很长的帖子。