当前位置: 首页 > 知识库问答 >
问题:

使用自签名客户端证书的Java oAuth

姚臻
2023-03-14

我有一个具有自签名客户端证书的完全工作的oauth,直到它突然停止工作。我得到SocketException:Connection Reset。根据我正在集成的API Xero的说法,他们现在一切都很好,但一周前他们确实有SSL问题。

自从上次它工作以来,我们移到了Java8,为了这个测试,我回滚了它。最初我让它与这个oauth项目一起工作,因为它是唯一一个支持自签名客户端证书的项目。今天我对Scribe进行了一点黑客攻击,以便将证书添加到请求中。当我终于让它工作时,我又得到了同样的异常。

Set<KeyManager> keymanagers = new HashSet<KeyManager>();
final KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(
    KeyManagerFactory.getDefaultAlgorithm());
kmfactory.init(entrustStore, password.toCharArray());
final KeyManager[] kms = kmfactory.getKeyManagers();
if (kms != null) {
    for (final KeyManager km : kms) {
        keymanagers.add(km);
    }
}

// TrustManagerFactory tmf =
//     TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
// tmf.init(keyStore);

SSLContext sslContext = SSLContext.getInstance(SSLSocketFactory.TLS);
sslContext.init(
    keymanagers.toArray(new KeyManager[keymanagers.size()]),
    null, // tmf.getTrustManagers()
    null);


// in the oauth project
SSLSocketFactory socketFactory = new SSLSocketFactory(sslContext);
Scheme scheme = new Scheme("https", 443, socketFactory);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(scheme);
BasicClientConnectionManager cm = 
    new BasicClientConnectionManager(schemeRegistry);
httpClient = new DefaultHttpClient(cm);

// ---------------------------------

// in Scribe
HttpsURLConnection connection = 
    (HttpsURLConnection) new URL(completeUrl).openConnection();
connection.setSSLSocketFactory(sslContext.getSocketFactory());

共有1个答案

傅长恨
2023-03-14

这个问题毕竟与TLS版本有关。使用TLSV1.1就达到了目的。

 类似资料:
  • 问题内容: 我正在使用Jersey客户端库针对在jboss上运行的rest服务运行测试。我使用自签名证书在服务器(在本地主机上运行)上设置了https。 但是,每当我使用https url运行测试时,都会出现以下错误: 我知道这是因为我的自签名证书不在Java密钥库中。有什么办法可以让我不检查ssl证书的有效性,而直接使用它呢? 这段代码只能在测试服务器上运行,因此,我不想在每次设置新的测试服务器

  • 问题内容: 我完全被困在这里。我有一个Java客户端代码,需要使用自签名证书连接到SSL服务器。 仅 当我在服务器端禁用SSLv2支持时, 才会 出现此问题。 痕迹是 在服务器端,我可以看到以下跟踪: 如果启用SSL2,我会看到 而且一切正常。 我还知道那不是服务器端的东西,因为与其他软件连接可以正常工作。 知道我在做什么错吗? 还有人知道这个“读取客户端问候A / B”是什么意思吗? 谢谢 更新

  • 问题内容: 我正在尝试确保通过Internet进行通信的Java客户端/服务器应用程序的连接安全。我的想法是将SSL套接字与自签名证书和客户端身份验证一起使用。我做了以下事情: 服务器:包含新的自签名证书的密钥库。 客户端:包含新的自签名证书的密钥库。 服务器:包含导出的客户端证书的信任库(来自上面的项目符号)。导出客户端证书并将其导入服务器的信任库 客户端:包含导出的服务器证书的信任库(从第一个

  • 我正在为TIBCO EMS队列测试运行一个JMS点对点采样器。我已经将所有tibco ems JAR添加到jmeter lib文件夹中。在JMS采样器中配置队列详细信息、上下文工厂、用户凭据。当使用tcp请求队列击中TIBCO ems时,它正在工作。但是当用SSL url击中时,它无法连接。 我尝试了以下方式来附上tibco团队给出的自签名证书

  • 我正在使用AWS API网关和一个后端。为了确保所有的连接都通过API网关,我需要使用TLS客户端身份验证(又名双向身份验证,相互身份验证)。 原则上,这与以下内容一起工作: 我遇到的问题是这个错误: TLS:无法验证客户端的证书:X509:由未知授权机构签署的证书(可能是因为在尝试验证候选授权机构证书“Apigateway”时“X509:签名无效:父证书无法签署此类证书”)

  • 我在服务器上有一个自签名的grpc服务,并使用dart客户端在dart服务器上运行。但我不知道如何绕过或允许节点客户端的自签名证书。。我试过这个: 但当我调用时,我的验证checkServerIdentity没有调用。 有人有线索吗?

  • 问题内容: 我正在连接到以前成功使用过的Web服务,但是现在他们已经更改了主机名并向我发送了两个.pem文件。一个是CA,另一个是我的新客户证书。 (我将Java 1.5,Spring + Spring Web Services与Apache httpclient一起使用,但是我怀疑我的问题是证书,密钥和SSL本身。) 我已经导入了.pem文件以及从Firefox导出到cacerts中的主机的.c