簡體   English   中英

臨時將自簽名證書添加到本地信任庫

[英]Temporarily adding a self-signed certificate to a local truststore

我運行一個使用httpsconnections的Java應用程序。 在服務器上有一個自簽名證書。 在我的本地計算機上,我在路徑C:\\Whatever\\mycertificate.cer上擁有此證書的副本。 我想這樣做,以便我的本地計算機僅對我的應用程序接受自簽名證書,並將其作為https連接的受信任證書(除了普通簽名證書),並且僅在應用程序運行時接受。

我程序的輸入參數是證書的路徑。 我使用以下代碼將其轉換為Java對象X509Certificate

CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
        InputStream inputStream = new FileInputStream(pathToTheCertificateFile);
        X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(inputStream);
        inputStream.close();

接下來,我創建一個新的空Keystore (信任Keystore )並將證書對象添加到其中:

KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null);
        trustStore.setCertificateEntry("extra", certificate);

最后,我創建TrustManager使用TrustManagerFactory

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(trustStore);

最后,我使用這些信任管理器數組來初始化SSLContext

SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, tmf.getTrustManagers(), null);
    HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

這有3個問題:

  1. 它不起作用-那我做錯了什么步驟?
  2. 此設置將僅允許給定證書,而不允許給定證書與普通cacerts的並集。 如何添加其他證書?
  3. 我不確定這只能在TEMPORARILY(直到應用程序停止)和LOCALLY(僅對於我的應用程序)有效-有人知道是否是這種情況嗎? 如果可以的話,我可以做些什么改變呢?

這里有一個關於這個問題的體面討論: https : //security.stackexchange.com/questions/40207/why-ie-windows-forces-you-to-install-self-signed-certificates-as-root-ca-制作 簡而言之,這是故意很難做到的。 您是否有理由不能僅將例外添加到瀏覽器?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM