繁体   English   中英

设置SOLR SSL属性

[英]Setting SOLR SSL properties

当我使用提供的Apache SOLR启动脚本(版本6.6.0)时,该脚本创建并执行一个Java命令行,该命令行具有两组SSL属性,其相关元素设置为相同的值。 一组具有类似于javax.net.ssl.*名称,而另一组具有诸如solr.jetty.*名称。 例如:

 java -server ... -Dsolr.jetty.keystore.password=secret ... -Djavax.net.ssl.keyStorePassword=secret ... ... -jar start.jar --module=https 

我们的安全团队不允许在命令行或环境变量中传递密码,但允许将其放置在文件中,前提是该文件具有受限的访问权限。 我注意到solr/server/etc目录中有一个jetty-ssl.xml文件,可用于为所有solr.jetty.*属性(包括solr.jetty.keystore.password提供默认值。 当我从Java命令行中删除所有javax.net.ssl.keyStorePasswordsolr.jetty.keystore.password属性,并使用我的密钥库密码更新jetty-ssl.xml文件时,SOLR似乎从包含的默认密钥库密码开始在那个文件中。 然后,我可以使用浏览器连接到https://localhost:8983/solr/#并访问SOLR Admin页面。

SOLR独立产品或SOLR云产品中是否使用过javax.net.ssl.*属性? 它们是否在浏览器之外的后台用于SOLR服务器连接,以连接到其他进程(如zookeeper)? 我可以在源代码中看到它们的唯一参考是solrj客户端中包含的solr嵌入式代码。

是的,solr.jetty服务器端和javax.net.ssl。*客户端属性都被SOLR使用。 对于某些操作(例如集合创建),SOLR似乎会自行连接,当它这样做时,它将尝试通过SSL与javax.net.ssl。*属性值进行连接。

为了避免在命令行或环境变量中传递属性,我想到的解决方案是创建一个仅具有premain方法的javaagent类。 在start.jar中main之前运行的premain方法中,我读取了一个包含“秘密” SSL属性的属性文件,例如javax.net.ssl.keyStorePassword。 然后,代理将该键/值添加到Java System属性中。

因此,当main启动时,所有SSL属性都是已知的,并且尚未暴露给命令行或环境变量。 显然,为了维护安全性,必须限制对属性文件的所有权和权限。 可以将以下内容添加到SOLR Java命令行中,以确保代理程序运行并可以作为参数访问属性文件:

java -javaagent:ssl-agent.jar=/path/to/ssl/properties/file ... -jar start.jar ... 

有关编写Java代理的信息,请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM