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

使用Atlassian REST API连Jira遇SSL错误,开发环境如何关闭证书验证?

解决Jira REST API Java客户端的SSL握手错误(开发环境)

你猜的没错,这个错误完全是因为Jira使用的自签名证书没被你的JVM信任导致的。在开发环境下,我们确实可以通过自定义客户端配置来跳过证书验证,下面是具体的实现方法:

方法1:彻底关闭证书验证(仅开发环境使用!)

这种方式会绕过所有SSL证书校验,非常不安全,绝对不能用在生产环境。具体步骤是自定义一个HttpClient实例,禁用SSL验证,然后把它传给JiraRestClientFactory:

import com.atlassian.jira.rest.client.api.JiraRestClient;
import com.atlassian.jira.rest.client.api.JiraRestClientFactory;
import com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory;
import com.atlassian.httpclient.api.HttpClient;
import com.atlassian.httpclient.apache.httpcomponents.DefaultHttpClient;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;

import javax.net.ssl.SSLContext;
import java.net.URI;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

public class JiraSslBypassExample {
    public static void main(String[] args) throws Exception {
        // 创建信任所有证书的策略
        TrustStrategy trustAllCertificates = (X509Certificate[] chain, String authType) -> true;

        // 构建跳过证书校验的SSL上下文
        SSLContext sslContext = SSLContexts.custom()
                .loadTrustMaterial(null, trustAllCertificates)
                .build();

        // 创建忽略主机名验证的Socket工厂
        SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(
                sslContext,
                NoopHostnameVerifier.INSTANCE
        );

        // 构建自定义HttpClient实例
        CloseableHttpClient apacheHttpClient = HttpClients.custom()
                .setSSLSocketFactory(sslSocketFactory)
                .build();
        
        HttpClient customHttpClient = new DefaultHttpClient(apacheHttpClient);

        // 使用自定义HttpClient创建JiraRestClient
        JiraRestClientFactory factory = new AsynchronousJiraRestClientFactory();
        JiraRestClient restClient = factory.create(
                new URI("https://你的Jira实例地址"),
                new BasicHttpAuthenticationHandler("你的用户名", "你的密码"),
                customHttpClient
        );

        // 这里就可以正常调用Jira API了
        // 示例:获取当前用户信息
        // System.out.println(restClient.getCurrentUser().get());

        // 记得关闭客户端释放资源
        restClient.close();
    }
}

方法2:导入自签名证书到JVM(更推荐的开发/测试方式)

如果不想完全禁用验证,你可以把Jira的自签名证书导入到JVM的信任存储中,这样既安全又能解决问题:

  • 首先导出Jira的证书:通过浏览器访问Jira地址,点击地址栏的锁图标,导出证书为.cer格式
  • 然后用keytool命令导入到JVM的cacerts存储:
keytool -import -alias jira-custom-cert -file /你的证书路径/jira-cert.cer -keystore $JAVA_HOME/jre/lib/security/cacerts

默认的cacerts密码是changeit,导入后重启你的应用,就不会再出现SSL错误了。

重要提醒:方法1只适合开发环境快速调试,生产环境必须使用受信任的合法证书,绝对不能禁用SSL验证!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:11:24