You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过docker-compose配置实现Nexus的SSL安全加固(无需Nginx)

如何通过docker-compose配置实现Nexus的SSL安全加固(无需Nginx)

嘿,刚好我之前做过类似的配置,不用Nginx完全可以让Nexus自己搞定SSL!你已经挂载了证书卷,接下来只要做两件事:把证书转换成Nexus能识别的Java密钥库格式,再修改docker-compose.yml配置参数就行,一步步来:

第一步:把你的PEM证书转换成Java JKS密钥库

Nexus是Java应用,不认普通的PEM格式证书,得转成JKS(Java KeyStore)格式。假设你的证书文件是cert.pem,私钥是key.pem,都在/var/volume/nexus/certs目录下,执行下面的命令:

  1. 先把证书和私钥打包成PKCS12格式(这是中间过渡格式):
openssl pkcs12 -export -in /var/volume/nexus/certs/cert.pem -inkey /var/volume/nexus/certs/key.pem -out /var/volume/nexus/certs/nexus.p12 -name nexus

执行时会让你设置一个PKCS12的密码,记好这个密码,后面要用!

  1. 再把PKCS12转成JKS密钥库:
keytool -importkeystore -srckeystore /var/volume/nexus/certs/nexus.p12 -srcstoretype PKCS12 -destkeystore /var/volume/nexus/certs/nexus-keystore.jks -deststoretype JKS

这里需要输入刚才设置的PKCS12密码,然后设置JKS密钥库的密码(建议和PKCS12密码一致,方便管理),别名就用nexus就行。

  1. (可选)如果你的证书是自签名或者来自内部CA,记得把CA证书导入到信任库:
keytool -import -trustcacerts -file /var/volume/nexus/certs/ca.pem -alias ca -keystore /var/volume/nexus/certs/nexus-truststore.jks

同样设置信任库的密码,记住它。

第二步:修改你的docker-compose.yml配置

现在把你的原docker-compose改成下面这样,重点是添加环境变量和调整端口:

version: '3.8'
services:
  nexus:
    image: sonatype/nexus3:latest
    container_name: nexus
    volumes:
      - nexus-data:/nexus-data  # 原来的Nexus数据卷
      - /var/volume/nexus/certs:/certs:ro  # 你已经挂载的证书卷,ro是只读,更安全
    environment:
      # 指定Nexus使用Jetty的HTTPS配置文件
      - NEXUS_ARGS="--jetty.etc=/nexus-data/etc/jetty/jetty-https.xml"
      # 设置Java虚拟机的SSL参数,指向我们生成的密钥库和信任库
      - INSTALL4J_ADD_VM_PARAMS="-Djavax.net.ssl.keyStore=/certs/nexus-keystore.jks -Djavax.net.ssl.keyStorePassword=你的JKS密码 -Djavax.net.ssl.trustStore=/certs/nexus-truststore.jks -Djavax.net.ssl.trustStorePassword=你的信任库密码"
    ports:
      - "8443:8443"  # SSL端口,如果你想用标准443端口,可以改成"443:8443"(注意:443是特权端口,可能需要调整容器权限)
    restart: unless-stopped
volumes:
  nexus-data:

几个关键配置说明:

  • NEXUS_ARGS:告诉Nexus加载Jetty的HTTPS配置文件,默认这个文件在Nexus数据卷里已经存在,不用额外创建。
  • INSTALL4J_ADD_VM_PARAMS:给Java虚拟机传递SSL相关的参数,指定密钥库、信任库的路径和密码,这些参数会让Nexus启动时启用SSL。
  • 端口:把原来的8081端口换成8443(Nexus默认的HTTPS端口),如果要对外用443,直接映射即可,但要注意Linux系统中1024以下的端口需要root权限,你可以给容器加cap_add: NET_BIND_SERVICE权限,或者用iptables转发。

第三步:重启Nexus服务

执行命令重启容器:

docker-compose down && docker-compose up -d

等个几分钟让Nexus启动完成,然后访问https://你的服务器IP:8443,如果能正常打开Nexus页面,说明SSL配置成功了!

额外注意事项:

  • 证书权限:确保容器里的nexus用户能读取/certs目录下的文件,你可以在主机上执行chmod 644 /var/volume/nexus/certs/*.jks和chmod 755 /var/volume/nexus/certs来设置权限。
  • 密码安全:不要把密码硬编码在docker-compose.yml里!建议用.env文件存储密码,比如创建一个.env文件:
    KEYSTORE_PASSWORD=你的JKS密码
    TRUSTSTORE_PASSWORD=你的信任库密码
    
    然后在docker-compose里改成${KEYSTORE_PASSWORD}和${TRUSTSTORE_PASSWORD},这样更安全。
  • 关闭HTTP端口:如果不需要HTTP访问了,可以把原来的8081端口映射删掉,强制所有流量走HTTPS。

备注:内容来源于stack exchange,提问作者akshatha prakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:14:54