简介
我们最近尝试安装的新证书出现问题。证书用于对发送到外部站点的消息进行加密和签名。这是一个新的证书,可以理解,它可能有问题。然而,最有趣的部分是证书在不同平台上的行为非常不同。当证书失效时,我们试图向业务部门请求一个新的证书,大数据分析应用,但他们的回答是,该证书与基于Microsoft的应用程序一起工作,因此问题将出现在PI端。
分析:
我们使用Java映射对消息进行加密和签名,因此对证书加载过程中的哪个部分出错有了一些了解正在发生。在我们继续之前,请注意一下证书别名:
所有密钥存储条目(密钥和证书)都是通过唯一别名访问的。此外,别名不区分大小写 - mycertalias和mycertalias将引用同一个条目。
从密钥库提取证书密钥基本上涉及三个步骤:
我们启用了Java代码日志记录,并发现加载证书时没有问题。
证书加载很好。如果我们看看ks尺寸()返回1.
枚举别名输出别名 - 迄今为止良好
String alias=(String)下一步();
但是,如果使用别名提取证书,则返回空值!
我们从日志中得到的错误信息。我已经用替换了实际的别名
查看涉及的不同部分,我们试图将问题隔离在以下部分:
JVM:我们想看看不同的JVM是否对相同的证书给出不同的结果。JCE:JCE不是标准JAVA安装的标准配置,必须通过安装JAVA加密扩展来扩展。它可以从Oracle下载,扩展可以从这个链接下载。sappijava应用服务器使用IAIK的JCE.
在不同环境中检查证书的测试:
在其他环境中的测试:
这是问题变得更有趣的地方。我们认为证书有问题,大数据对比,上云,我们应该能够在不同的环境中复制该问题。
Test1:NWDS:Standalone test(在Windows环境下):Default JVM/JCE
因此在本地PC上测试时没有发现任何问题。我们认为在PI上运行的JVM可能有问题服务器。我们在托管PI服务器的unix环境中尝试了第二个测试。
Test2:NWDS:独立测试(在unix环境中)和IBM JCE
然后我们认为可能IAIK JCE有问题。所以又做了一个测试。
Test3:NWDS:独立测试(在Windows环境中)使用IAIK JCE提供程序。
现在我们怀疑IAIKJCE图书馆有问题。但是,我们无法访问PI服务器上运行的JCE库版本。我们使用IAIK版本5.51进行测试,该版本可以下载进行测试。
解决方法:
由于这些测试无法确定错误所在,但我们很清楚证书别名存在问题。作为一种解决方法,我们更改了证书别名。
OpenSSL:
OpenSSL是一种用于SSL工具的瑞士军刀,当我们意识到让证书工作的唯一方法是修改它时,它拯救了我们。
一些示例:
-提取未加密的密钥文件
-提取客户端证书
-提取CA证书(根证书)和所有中间证书)
所以我们能够提取客户端证书。别名(友好名称)的示例屏幕截图。
初始解决方法:
要提取私钥,请运行OpenSSL命令:
要提取证书(公钥),请运行OpenSSL命令:
然后我们使用OpenSSL组装证书。
为证书添加别名的示例:
因此这提供了使用新别名的解决方法但是,云服务器网址,我们仍然不太清楚为什么在不同的平台上会出现这种差异,
然后我复制了Java map中与将证书作为适配器模块加载相关的部分,以便可以在不同的PI版本中轻松测试。然后我在SAP CAL library中启动了一个SAP PO实例(PO版本为PO 7.5),令人惊讶的是,大数据在线,这个问题仍然存在。
更简单的解决方法
引发了一个SAP事件并得到了更简单的解决方法。
由于证书的问题只出现在SAP PI application server中,而且到处都很好,我们提出了一个SAP事件。问题似乎出在iaikjce库的版本上,我们正在使用它处理别名中的不可打印字符。我们还建议了一种比openssl更易于使用的解决方法。
步骤非常简单:
在NWA中使用现有的证书视图。导入证书。
现在使用NWA导出证书。
可以下载证书,并且具有不同的有效别名。
在我们修改证书之前,我们得到了以下跟踪。
现在它被加载。
结论和关键要点:
来自此博客的关键要点:
使用证书的典型步骤包括加载证书、提取别名属性,然后使用别名获取密钥/证书。SAP PI NWA Keystore将别名设置为文件名,因此可以用于修复别名问题。更高版本的os SAP PI/PO 7.5根据SAP解决了问题。但是,我还没有测试过它—SAP PO Cal有IAIKJCE版本3.181,但问题仍然存在。我已经创建了一个适配器模块,可以用来测试不同的系统https://github.com/viksingh/CheckCert