首页 > 解决方案 > 我如何告诉 NEXUS 使用自定义信任库

问题描述

在我们公司的网络中,我们的服务器使用自签名证书。我有一个在 docker swarm 上运行的 NEXUS Repository Manager 服务,我想设置 LDAP 身份验证。但由于我的 LDAP 服务器也使用自签名证书,我的 NEXUS 服务无法连接。我收到以下错误:

There is an error communicating with the server. Failed to connect to Ldap Server: sun.security.validator.ValidatorException: No trusted certificate found<br/><br/>Nexus returned an error: ERROR 400: Bad Request

当我搜索解决方案时,我在 sonatype NEXUS 文档中找到了这篇文章:https ://help.sonatype.com/repomanager2/secure-socket-layer-ssl/managing-outbound-ssl-certificates#ManagingOutboundSSLCertificates-ConfiguringNexusRepositoryManagerWithaCustomTruststore

我试图关注这篇文章。首先,我自定义了 ${NEXUS_HOME}/bin/jws/conf/wrapper.conf 文件(参见第 4 和第 5 号):

# Additional JVM parameters (tune if needed, but match the sequence of numbers!)
wrapper.java.additional.1=-Djava.io.tmpdir=./tmp
wrapper.java.additional.2=-Djava.net.preferIPv4Stack=true
wrapper.java.additional.3=-Dcom.sun.jndi.ldap.connect.pool.protocol="plain ssl"
wrapper.java.additional.4=-Djavax.net.ssl.trustStore=/usr/secrets/truststore.jks
wrapper.java.additional.5=-Djavax.net.ssl.trustStorePassword=changeit

修改后,我使用提供的启动脚本启动了 NEXUS(请参阅我的 Dockerfile 以添加修改后的 wrapper.conf 和启动应用程序):

[...]
COPY ./wrapper.conf /opt/sonatype/nexus/bin/jws/conf/wrapper.conf

RUN chown -R -L nexus.nexus ${NEXUS_HOME}
RUN chown -R nexus.nexus ${SONATYPE_WORK}

USER nexus
WORKDIR ${NEXUS_HOME}

CMD ${NEXUS_HOME}/bin/nexus console

我使用 compose yml 文件启动我的 nexus 服务并调用

docker stack deploy --compose-file /path/to/my/nexus.yml nexus

然后我检查容器正在运行的集群节点中的哪个节点并附加到它

docker exec -ti <containername> bash

我检查了我修改后的 wrapper.conf 是否在容器中 - > OK 然后我检查了 NEXUS 的 java 进程ps -ef | grep java- > 我的 jvm 属性-Djavax.net.ssl.trustStore并且 -Djavax.net.ssl.trustStorePassword不可见:

输出ps -ef | grep java

nexus       76    74  0 11:29 ?        00:01:22 java -Djava.io.tmpdir=./tmp -Djava.net.preferIPv4Stack=true -Dcom.sun.jndi.ldap.connect.pool.protocol=plain ssl -Xms256m -Xmx768m -Djava.library.path=bin/jsw/lib -classpath bin/jsw/lib/wrapper-3.2.3.jar:./lib/slf4j-api-1.7.25.jar:./lib/jetty-servlet-8.1.16.v20140903.jar:./lib/logback-access-1.2.3.jar:./lib/metrics-core-2.2.0.jar:./lib/jetty-webapp-8.1.16.v20140903.jar:./lib/javax.servlet-3.0.0.v201112011016.jar:./lib/metrics-jetty-2.2.0.jar:./lib/jul-to-slf4j-1.7.25.jar:./lib/jetty-jmx-8.1.16.v20140903.jar:./lib/jetty-client-8.1.16.v20140903.jar:./lib/jetty-deploy-8.1.16.v20140903.jar:./lib/jetty-io-8.1.16.v20140903.jar:./lib/jetty-util-8.1.16.v20140903.jar:./lib/nexus-bootstrap-2.14.14-01.jar:./lib/jetty-security-8.1.16.v20140903.jar:./lib/plexus-interpolation-1.16.jar:./lib/jetty-xml-8.1.16.v20140903.jar:./lib/logback-core-1.2.3.jar:./lib/jetty-http-8.1.16.v20140903.jar:./lib/jetty-continuation-8.1.16.v20140903.jar:./lib/metrics-logback-2.2.0.jar:./lib/logback-classic-1.2.3.jar:./lib/jetty-rewrite-8.1.16.v20140903.jar:./lib/jetty-server-8.1.16.v20140903.jar:./conf/ -Dwrapper.key=zAxEtY8vJ5V7ACyi -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.pid=74 -Dwrapper.version=3.2.3 -Dwrapper.native_library=wrapper -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1 org.sonatype.nexus.bootstrap.jsw.JswLauncher ./conf/jetty.xml ./conf/jetty-requestlog.xml

我可以在那里看到 3 个 jvm 参数 -Djava.io.tmpdir=./tmp-Djava.net.preferIPv4Stack=true但不是我-Dcom.sun.jndi.ldap.connect.pool.protocol="plain ssl"wrapper.conf两个新参数。

任何人都可以看看这个并给我一些建议吗?

标签: javasslnexusdocker-swarm

解决方案


对于那些有时可能有同样问题的人:我并没有真正弄清楚,为什么我的 wrapper.conf 中的自定义属性被忽略了,但我找到了一种解决方法:

我将自定义信任库中的证书添加到使用的默认 java 安装之一keytool


推荐阅读