因此,我正在嘗試通過在 Java 程序中使用客戶端證書來測(cè)試與我公司 Web 服務(wù)器的連接(使用 2 路 SSL)。我嘗試在 curl 調(diào)用中使用相同的證書(分離的證書和密鑰)并設(shè)法獲得所需的響應(yīng)。但是當(dāng)我嘗試在我的 Java 程序中使用它(組合成 pkcs12 格式)時(shí),它會(huì)給出 400 響應(yīng),說沒有發(fā)送所需的 SSL 證書。為什么會(huì)這樣?public static void main(String[] args) { System.out.println("Taufiq's mutual SSL-authentication test"); org.apache.log4j.BasicConfigurator.configure(); Logger.getRootLogger().setLevel(Level.INFO); try { final String CERT_ALIAS = "something", CERT_PASSWORD = "something"; KeyStore identityKeyStore = KeyStore.getInstance("pkcs12"); FileInputStream identityKeyStoreFile = new FileInputStream(new File("src/Cert.p12")); identityKeyStore.load(identityKeyStoreFile, CERT_PASSWORD.toCharArray()); KeyStore trustKeyStore = KeyStore.getInstance("jks"); FileInputStream trustKeyStoreFile = new FileInputStream(new File("src/truststore.jks")); trustKeyStore.load(trustKeyStoreFile, CERT_PASSWORD.toCharArray()); SSLContext sslContext = SSLContexts.custom() // load identity keystore .loadKeyMaterial(identityKeyStore, CERT_PASSWORD.toCharArray(), new PrivateKeyStrategy() { @Override public String chooseAlias(Map<String, PrivateKeyDetails> aliases, Socket socket) { return CERT_ALIAS; } }) // load trust keystore .loadTrustMaterial(trustKeyStore, null) .build(); SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, new String[]{"TLSv1.2", "TLSv1.1"}, null, SSLConnectionSocketFactory.getDefaultHostnameVerifier()); CloseableHttpClient client = HttpClients.custom() .setSSLSocketFactory(sslConnectionSocketFactory) .build(); // Call a SSL-endpoint callEndPoint (client); } catch (Exception ex) { System.out.println("Boom, we failed: " + ex); ex.printStackTrace(); }} } }
2 回答

莫回?zé)o
TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
我想你知道 ssl 握手是如何工作的。如果沒有,請(qǐng)熟悉一下。然后使用wireshark查看ssl握手。您將獲得比一些該死的 http 庫解釋更好的 ssl 警報(bào)詳細(xì)信息。如果有的話,這是一個(gè)誤導(dǎo)性錯(cuò)誤。
可以肯定的是,您的服務(wù)器必須信任您的客戶端證書,所以我假設(shè)您首先正確設(shè)置了東西;你說你試過 curl 但你沒有說它是否有效。
最后,我不認(rèn)識(shí)這些 SSL 類,所以您導(dǎo)入的不是 jdk 的 jsse 類;您可能是此類庫的受害者。

開滿天機(jī)
TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
事實(shí)證明,當(dāng)我使用核心 jdk jsse 類時(shí),程序運(yùn)行良好。我使用了上述程序,因?yàn)槲沂菑幕ヂ?lián)網(wǎng)上復(fù)制其中一個(gè)示例。
添加回答
舉報(bào)
0/150
提交
取消