java - 我如何告诉 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
两个新参数。
任何人都可以看看这个并给我一些建议吗?
解决方案
对于那些有时可能有同样问题的人:我并没有真正弄清楚,为什么我的 wrapper.conf 中的自定义属性被忽略了,但我找到了一种解决方法:
我将自定义信任库中的证书添加到使用的默认 java 安装之一keytool
推荐阅读
- php - 将用逗号分隔的文本拆分为一个数组,但忽略转义分隔符 \,
- python - 将 Python 函数从外部传递给另一个函数
- node.js - express 区分动态段和其他静态段
- jquery - 如何使用 jquery.scrollTo 和 jquery(.load) 方法,在同一个 div 中加载外部页面
- json - “jq.”打印的值与 json 文件中存在的值不同
- go - 如何为以文件路径作为参数的golang方法提供windows完整路径
- c# - 我可以用我的 C# 代码做些什么来将它应用到我在 Unity 中的 UI?
- java - 如何清除片段回栈?
- pycharm - 使用 python 和 windows 10 安装 odoo
- python - 无法使用 Dash 0.41 加载 DataTable