通常我們寫java程式,要連線到https網站都會需要先在jre的cacerts裡匯入這個網站的憑證,才能順利連線。
如果沒有匯入憑證的話,會出現SSLHandshake的錯誤,
需要透過jdk裡的keytool工具,將SSL憑證匯入到cacerts裡面。
而在WebSphere裡使用的jdk,路徑如下:
/opt/IBM/WebSphere/AppServer/java
我們用的版本是jdk1.8,這個jdk是IBM自家的調整過的版本
sh-4.4$ ./java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 8.0.6.31 - pxa6480sr6fp31-20210510_01(SR6 FP31))
IBM J9 VM (build 2.9, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20210423_470221 (JIT enabled, AOT enabled)
OpenJ9 - 19b42fd
OMR - a028c6b
IBM - 8165371)
JCL - 20210422_01 based on Oracle jdk8u291-b09
不過在WebSphere上運行的程式也一樣需要匯入憑證,但方法不太一樣,不需要用到keytool。
要匯入憑證也不是直接匯入jre裡的cacerts,而是要透過console去匯入。
在WebSphere上運行的程式,除非是建立連線的方法是用了不支援的第三方套件,
否則連線時都會從WebSphere自己的憑證庫驗證,而非jre自帶的憑證庫。
在沒匯入憑證的情況下,程式會出現以下錯誤
[10/2/22 16:20:48:851 UTC] 00000071 SystemErr R javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.j: PKIX path building failed: com.ibm.security.cert.IBMCertPathBuilderException: unable to find valid certification path to requested target
明天就來匯入憑證。