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

Maven构建时如何仅允许来自特定域名的自签名SSL证书?

可以实现,下面是两种常用的安全方案,既满足仅信任你们企业域名自签名证书的需求,也不会有全局关闭SSL校验的安全风险。

方案一:使用仅包含企业证书的专属信任库(最推荐)

操作步骤:

  • 导出你们企业内部CA的根证书,或者primary-nexus.JoeBloggsCompany.com、secondary-nexus.JoeBloggsCompany.com两个站点的证书,Chrome导出路径为:点击地址栏锁形图标→「证书」→「详细信息」→「导出」,选择Base64编码的X.509(.CER)格式存储。
  • 用JDK自带的keytool工具,将导出的证书导入自定义的专属信任库,不需要修改JDK默认的cacerts文件,执行命令:
    keytool -importcert -file 你导出的证书路径.cer -alias joebloggs-company-ca -keystore ./maven-company-truststore.jks -storepass 自定义密码
    执行时按照提示确认导入即可。
  • 运行Maven命令时指定该专属信任库即可:
    mvn 构建命令 -Djavax.net.ssl.trustStore=./maven-company-truststore.jks -Djavax.net.ssl.trustStorePassword=自定义密码

这个方案的信任库仅信任你们企业的证书,所有外部站点的证书还是走正常校验逻辑,完全符合你的需求。

方案二:在settings.xml中为指定仓库单独配置信任库

如果不想每次执行命令都带参数,且使用的是Maven 3.2.5及以上版本,可以直接在Maven的settings.xml中给内部仓库单独绑定专属信任库,其他公网仓库不受影响:
在settings.xml的<servers>节点下添加如下配置:

<!-- 主Nexus仓库配置,id要和你配置的仓库id完全一致 -->
<server>
  <id>primary-nexus</id>
  <configuration>
    <httpConfiguration>
      <all>
        <ssl>
          <trustStore>你的专属信任库路径/maven-company-truststore.jks</trustStore>
          <trustStorePassword>你设置的信任库密码</trustStorePassword>
        </ssl>
      </all>
    </httpConfiguration>
  </configuration>
</server>
<!-- 备Nexus仓库配置 -->
<server>
  <id>secondary-nexus</id>
  <configuration>
    <httpConfiguration>
      <all>
        <ssl>
          <trustStore>你的专属信任库路径/maven-company-truststore.jks</trustStore>
          <trustStorePassword>你设置的信任库密码</trustStorePassword>
        </ssl>
      </all>
    </httpConfiguration>
  </configuration>
</server>

注意配置中的<id>字段值必须和你pom.xml或者settings.xml中配置的内部仓库、镜像的id完全匹配才能生效。

说明

你提到的-Dmaven.wagon.http.ssl.insecure=true和-Dmaven.wagon.http.ssl.allowall=true参数是全局关闭所有SSL证书校验,任意域名的任意证书都会被放行,存在中间人攻击的风险,企业生产场景下确实不建议使用。

内容的提问来源于stack exchange,提问作者Muhamad Gafar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:54:03