[PODMAN] java.security.KeyManagementException: FIPS mode: only SunJSSE TrustManagers may be used

วันนี้น่าจะวันซวย Run Image ขึ้นที่ Site ลูกค้า แล้วเจอ Error นี้ครับ

java.security.KeyManagementException: FIPS mode: only SunJSSE TrustManagers may be used 
 at java.base/sun.security.ssl.SSLContextImpl.chooseTrustManager(SSLContextImpl.java:133) 
 at java.base/sun.security.ssl.SSLContextImpl.engineInit(SSLContextImpl.java:95) 
 at java.base/javax.net.ssl.SSLContext.init(SSLContext.java:297) 
 at org.apache.http.ssl.SSLContextBuilder.initSSLContext(SSLContextBuilder.java:374) 
 at org.apache.http.ssl.SSLContextBuilder.build(SSLContextBuilder.java:388) 
 at com.ds.commu.RestHelper.poolingConnectionManager(RestHelper.java:156) 
 at com.ds.commu.RestHelper.httpClient(RestHelper.java:141)

Environment

How to fix

  • อ๋อ อย่าลืมตรวจสอบด้วย RedHat 8 กำหนด System-wide cryptographic policies เป็น FIPS mode หรือไม่ ด้วยคำสั่ง
[invsapp@invsdevapp01 ~]$ update-crypto-policies --show
FIPS
  • หลังจากลองมาหลายวิธี
    • วิธีแรกลอง Config java.security ปรับ security.useSystemPropertiesFile=false แต่ไม่รอดครับ
    • สุดท้ายตอนสร้าง docker image ได้เพิ่ม Parmeter -Dcom.redhat.fips=false ตอน Run Java เข้าไปแทน เนื่องจาก FIPS Mode ไม่สามารถปิดแบบ Global ได้ ต้อง Per Process เท่านั้น อ้างอิงจาก How to disable FIPS for java when FIPS is enabled on RHEL 8? - Red Hat Customer Portal
  • สรุปที่แก้ไป ของเดิม ตัวคำสั่งที่ใช้ Start App ใน Container  เป็นประมาณนี้ครับ
CMD java -jar ds-gateway-web-app.war --spring.profiles.active=production,gateway,native --spring.config.location=$GW_PROP
  • ของใหม่ เติม -Dcom.redhat.fips=false
CMD java -jar -Dcom.redhat.fips=false ds-gateway-web-app.war --spring.profiles.active=production,gateway,native --spring.config.location=$GW_PROP

Future Work (For Developer)

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.