วันนี้น่าจะวันซวย 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
- Host
- redhat 8.2 with FIPS mode enable
- podman 2.0.5
- Container Image
- Base Image rockylinux:8.5.20220308 (Version 8.5.20220308)
- openjdk version "11.0.15" 2022-04-19 LTS
- Application Spring Boot 2.6.6
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)
- การไปเพิ่ม Config -Dcom.redhat.fips=false ผมมองว่าเป็นการแก้ที่ปลายเหตุ (Workaround) จริงๆควรจะต้องเข้าไปไล่ Code ที่มีปัญหาเพิ่มเติมครับ โดยดูไว้น่าจะเกี่ยวกับ
- หลังจากได้ลองดู Code แล้ว น่าจะมี Blog แยกอีกอันมาอธิบายครับ ^__^
Reference
- How to disable FIPS for java when FIPS is enabled on RHEL 8? - Red Hat Customer Portal
- KeyManagementException: FIPS mode: only SunJSSE TrustManagers may be used - Red Hat Customer Portal
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.