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

如何在Java中加载多个证书文件?

羊舌高明
2023-03-14
char []passwKey = "1234567".toCharArray();
        KeyStore ts = KeyStore.getInstance("PKCS12");
        ts.load(new FileInputStream("/home/user/Desktop/file.p12"), passwKey);
        KeyManagerFactory tmf = KeyManagerFactory.getInstance("SunX509");
        tmf.init(ts,passwKey);
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(tmf.getKeyManagers(), null, null);
        SSLSocketFactory factory =sslContext.getSocketFactory();
        HttpsURLConnection.setDefaultSSLSocketFactory(factory);
        SSLSocket socket = (SSLSocket) factory.createSocket("www.host.com", 8883); // Create the ServerSocket
        String[] suites = socket.getSupportedCipherSuites();
        socket.setEnabledCipherSuites(suites);
        socket.startHandshake();
handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

我试了几个解决方案,为了前任。HTTPS/SSL上的Java客户端证书或获取javax.net.ssl.sslHandShakeException:收到致命警报:handshake_failure错误,从.p12文件中收到的证书和从浏览器导出的证书都不起作用...

更新2:

我尝试了以下方法:https://stackoverflow.com/a/11908693/1215791,并设法访问了ServerHelloDone(并找到了可信证书...)。

com.sun.xml.internal.messaging.saaj.soap.MessageImpl identifyContentType
SEVERE: SAAJ0537: Invalid Content-Type. Could be an error message instead of a SOAP message
Exception in thread "main" com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:148)
    at SoapT.login(SoapT.java:241)
    at SoapT.main(SoapT.java:75)

我认为这不是附加证书的问题,而是创建soap请求时的错误或服务器的错误(html)。

共有1个答案

太叔超英
2023-03-14

尝试not-thet-commons-ssl。

非常容易使用SSL-Library。创建SSLClient并添加信任材料

网页示例:

Client Example:

SSLClient client = new SSLClient();

// Let's trust usual "cacerts" that come with Java.  Plus, let's also trust a self-signed cert
// we know of.  We have some additional certs to trust inside a java keystore file.
client.addTrustMaterial( TrustMaterial.DEFAULT );
client.addTrustMaterial( new TrustMaterial( "/path/to/self-signed.pem" ) );
client.addTrustMaterial( new KeyMaterial( "/path/to/keystore.jks", "changeit".toCharArray() ) );

// To be different, let's allow for expired certificates (not recommended).
client.setCheckHostname( true );  // default setting is "true" for SSLClient
client.setCheckExpiry( false );   // default setting is "true" for SSLClient
client.setCheckCRL( true );       // default setting is "true" for SSLClient

// Let's load a client certificate (max: 1 per SSLClient instance).
client.setKeyMaterial( new KeyMaterial( "/path/to/client.pfx", "secret".toCharArray() ) );
SSLSocket s = (SSLSocket) client.createSocket( "www.cucbc.com", 443 );
 类似资料:
  • 我正在创建一个Java程序来从服务器获取信息,但我必须从Java程序与服务器执行ssl握手。 我有文件证书用于身份验证,但我不知道如何用java加载该证书,以便java程序可以与我想要从中获取信息的服务器进行“握手”。从哪里开始?

  • 问题内容: 我试图从下面的文件中提取RES公钥 这是我做的代码.. 但是它抛出了 java.security.InvalidKeyException:IOException:ObjectIdentifier()-数据不是对象ID 从文件中提取RES公钥的合适方法是什么。 问题答案: X.509证书和X509EncodedKeySpec具有完全不同的结构,并且尝试将证书解析为密钥是行不通的。Java

  • 它是使用.NET 4.7.2生成的,类似于本问题中的答案:使用纯.NET Framework生成和签名证书请求 然后将序列化的CSR发送到服务器,服务器需要创建证书--问题是如何做到这一点。

  • 问题内容: 如何使用keytool [到证书存储]在一个文件中导入多个证书? keytool -importcert仅导入第一个。 问题答案: 如果要包括CA证书,则应添加该选项。 如果一个PEM文件中有多个证书链,则必须拆分该文件。

  • 下面的链接介绍了如何为Java7的安全邮件证书创建jssecacerts http://infposs.blogspot.com/2013/06/installcert-and-java-7.html 但是,一旦我试图发送邮件异常给作为"java.security.cert.证书异常:没有主题替代名称存在..." 如果我没有错,新的jssecacerts证书文件应该保存在工作目录下,我们必须手动将

  • 我不必去修复一些不起作用的东西,但我试着去理解为什么有些东西会起作用,因为我认为它不应该起作用。 我使用的是OpenJDK11/Ubuntu 16.04。我打了个HTTPS电话。SSL握手成功。 证书链包含3个证书: 当然是API证书。由中间CA发行(issuer=CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US) 中级CA证书。由根C