Tôi có một số ứng dụng Java kết nối với các ứng dụng và dịch vụ khác thông qua các kết nối được bảo mật bằng SSL. Trong quá trình phát triển, tôi có thể chỉ định keystore/truststore để sử dụng và mật khẩu bằng cách sử dụng JVM args:Ẩn mật khẩu kho khóa/mật khẩu JKS khi chạy quy trình Java
-Djavax.net.ssl.trustStore=certificate.jks
-Djavax.net.ssl.trustStorePassword=mypassword
-Djavax.net.ssl.keyStore=certificate.jks
-Djavax.net.ssl.keyStorePassword=mypassword
-Djavax.net.ssl.keyStoreType=jks
Điều này hoạt động hoàn hảo. Tuy nhiên, có một yêu cầu khi đi sản xuất để ẩn mật khẩu, bằng cách sử dụng JVM args có nghĩa là bất cứ ai nhìn vào danh sách quy trình sẽ có thể nhìn thấy mật khẩu trong văn bản rõ ràng.
Có cách nào đơn giản để giải quyết vấn đề này không? Tôi đã xem xét việc nhập các chứng chỉ vào tệp lib/security/cacerts của JRE, nhưng sự hiểu biết của tôi là điều này sẽ vẫn yêu cầu mật khẩu. Một tùy chọn là lưu trữ mật khẩu, mã hóa, trong một tệp và sau đó nhận các ứng dụng để đọc và giải mã khi đang di chuyển, nhưng điều này sẽ liên quan đến việc thay đổi và phát hành lại tất cả các ứng dụng (có một vài trong số đó). thà tránh điều này nếu có thể. Thư viện javax.net.ssl có bất kỳ hỗ trợ được xây dựng sẵn cho mật khẩu được mã hóa (ngay cả khi nó đơn giản như chỉ base64encoding hay bất kỳ thứ gì làm cho mật khẩu không rõ ràng) không?
Mọi đề xuất được đánh giá cao.
Đồng ý, tại một số thời điểm, ở đâu đó, sẽ phải có khóa hoặc mật khẩu được lưu trữ. Tôi đoán đó là điều chúng tôi sẽ phải giải quyết với các tài khoản/quyền người dùng/quy trình. Cảm ơn! – Matt