Java 设置SOLR SSL属性

Java 设置SOLR SSL属性,java,apache,ssl,solr,properties,Java,Apache,Ssl,Solr,Properties,当我使用提供的ApacheSolr启动脚本(版本6.6.0)时,该脚本创建并执行一个java命令行,该命令行具有两组SSL属性,这些属性的相关元素设置为相同的值。一个集合的名称类似于javax.net.ssl.*,而另一个集合的名称类似于solr.jetty.*。例如: 我们的安全团队不允许在命令行或环境变量中传递密码,但允许将密码放置在具有受限访问权限的文件中。我注意到在solr/server/etc目录中有一个jetty ssl.xml文件,可用于为所有solr.jetty.属性提供默认值,

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

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


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方法中,我读取了一个包含“secret”SSL属性的属性文件,如javax.net.SSL.keyStorePassword。然后,代理将该键/值添加到Java系统属性中

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

java -javaagent:ssl-agent.jar=/path/to/ssl/properties/file ... -jar start.jar ... 
有关编写java代理的信息,请参阅

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