我们正在使用内部管理的Nexus存储库开发企业代理(需要身份验证)背后的scala应用程序。我们正在使用scala sbt来维护我们的项目。我们的许多应用程序依赖项都托管在内部Nexus存储库之外,但是我们也有一些自定义构建的依赖项,这些依赖项在Internal Nexus中维护。有些项目使用内部和外部托管依赖项的混合,因此对某些项目通过代理,而不是为其他项目。我们的内部Nexus repo仅适用于HTTPS,需要根CA才能进行身份验证。
问题在于,当访问Internet以获取依赖关系时,我们需要在sbt选项中设置代理配置,如下所示:
export SBT_OPTS="-Dhttp.proxyHost=proxyhost.com -Dhttp.proxyPort=80 -Dhttp.proxyUser=foo -Dhttp.proxyPassword=bar -Dhttps.proxyHost=proxyhost.com -Dhttps.proxyPort=80 -Dhttps.proxyUser=foo -Dhttps.proxyPassword=bar"
访问nexus时,我们需要配置使用具有根CA的密钥库进行身份验证:
export SBT_OPTS="-Djavax.net.ssl.trustStore=$HOME/cacerts -Djavax.net.ssl.trustStorePassword=foo -Dhttp.nonProxyHosts=\"nexus.foo\""
问题是我们需要在构建项目时多次在两种配置之间切换,具体取决于sbt是访问Internet还是内部Nexus。
我们是否需要将所有证书明确添加到要信任的密钥库中?我们可以简单地将所有外部主机添加到信任以及内部吗?或者有没有办法让JVM运行sbt通过SSL握手与外部主机的可信权限进行身份验证,但内部主机的内部CA是否可以进行身份验证?