ssl - Tomcat,从 -D 选项中隐藏 javax.net.ssl.keyStorePassword

标签 ssl tomcat

安装在 Tomcat (9.0.36.B.RELEASE) 上的应用程序使用 SSL(在本例中为 IBM MQ)连接到外部源。因此,我需要为此信任库指定一个信任库和密码。
我让它在 setenv.sh 中添加到 JVM_OPTS 中工作。 :

-Djavax.net.ssl.trustStore=/opt/apps/certs/myapplication.truststore
-Djavax.net.ssl.trustStorePassword=TRUSTSTORE-PASSWORD
-Djavax.net.ssl.keyStore=/opt/apps/certs/myapplication.keystore
-Djavax.net.ssl.keyStorePassword=KEYSTORE-PASSWORD
经典问题,当我执行 ps -ef|grep java 时密码可见(在 RHEL 上运行)。
我已经看到了一些关于如何执行此操作的建议(例如 Hiding plain text password in JVM startup argumnets. " ps -ef | grep 'javax.net.ssl.keyStorePassword'" )。但是这些会在 WAR 文件中更改/添加代码或配置。
我正在寻找“tomcat”解决方案。有没有办法在Tomcat的范围内做到这一点。对 WAR 文件的更改很难实现,因为应用程序来自供应商。
备注 :这不适用于 web.xml 中的连接器配置,因为这只会为传入连接设置 SSL。在这里,应用程序正在与外部系统建立连接(从 Tomcat 的角度来看是出站的)。

最佳答案

您可以向 $CATALINA_BASE/conf/catalina.properties 添加其他属性它们将在 Tomcat 启动期间获取。您当然知道,系统属性对 JVM 来说是全局的,因此无法将此配置限制为仅限于单个应用程序:整个 Tomcat 服务器都会受到影响。
几乎所有 Java 系统属性都可以通过这种方式设置,但有一些异常(exception):

  • catalina.basecatalina.home (显然),
  • Tomcat logging 的配置,
  • 在用户代码之前启动的 JMX 和其他工具的配置。

  • 关注 : 你必须检查 VersionLoggerListener (在 server.xml 中定义)没有 logProps="true" ,否则将记录系统属性的值。默认情况下,仅记录 JVM 参数。

    关于ssl - Tomcat,从 -D 选项中隐藏 javax.net.ssl.keyStorePassword,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66763477/

    相关文章:

    Java SSLSockets : same keyStore on client and server, 安全吗?

    c# - 带有 SslStream 的 XmlTextReader - 从流中读取多个 xml

    docker - debian 上没有安装证书 :buster docker image?

    maven - spring boot 和 apache spark - 容器冲突

    c++ - boost asio SSL 服务器错误 : called a function you should not call

    amazon-web-services - 为什么我的 AWS cloudfront 可以工作,但不安全?

    linux - Tomcat 重启时启动 : init. d 脚本不成功

    variables - 将环境变量传递到 Tomcat 7.0 Web 应用上下文

    spring - Tomcat Spring WebApplicationContext

    java - 使用java代码远程部署war文件到Tomcat