亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

(Java) 未發送所需的 SSL 證書(在 curl 調用中使用時工作正常)

(Java) 未發送所需的 SSL 證書(在 curl 調用中使用時工作正常)

忽然笑 2022-07-14 17:15:48
因此,我正在嘗試通過在 Java 程序中使用客戶端證書來測試與我公司 Web 服務器的連接(使用 2 路 SSL)。我嘗試在 curl 調用中使用相同的證書(分離的證書和密鑰)并設法獲得所需的響應。但是當我嘗試在我的 Java 程序中使用它(組合成 pkcs12 格式)時,它會給出 400 響應,說沒有發送所需的 SSL 證書。為什么會這樣?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 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

我想你知道 ssl 握手是如何工作的。如果沒有,請熟悉一下。然后使用wireshark查看ssl握手。您將獲得比一些該死的 http 庫解釋更好的 ssl 警報詳細信息。如果有的話,這是一個誤導性錯誤。

可以肯定的是,您的服務器必須信任您的客戶端證書,所以我假設您首先正確設置了東西;你說你試過 curl 但你沒有說它是否有效。

最后,我不認識這些 SSL 類,所以您導入的不是 jdk 的 jsse 類;您可能是此類庫的受害者。


查看完整回答
反對 回復 2022-07-14
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

事實證明,當我使用核心 jdk jsse 類時,程序運行良好。我使用了上述程序,因為我是從互聯網上復制其中一個示例。



查看完整回答
反對 回復 2022-07-14
  • 2 回答
  • 0 關注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號