不重新启动 Firefox 不会刷新密钥库

Posted

技术标签:

【中文标题】不重新启动 Firefox 不会刷新密钥库【英文标题】:Keystore not refresh without restarting firefox 【发布时间】:2012-07-23 13:18:06 【问题描述】:

当我在 Mozilla 中添加/删除任何证书时,Mozilla 的密钥库在手动重新启动之前无法刷新。我创建了一个新的密钥库,用于从 Mozilla 获取私钥,但它不起作用。它使用了较旧的密钥库,因此即使证书已从 Mozilla 中删除,我也可以获得私钥。我该如何解决?代码如下:

public String Decrypt(String text, String pubkey) throws Exception

    System.out.println("------INSIDE IEPublicDecrypt METHOD------ ");
    X509Certificate cerificate = null;
    PrivateKey privatekey = null;
    KeyStore keyStorenew = null;
    String aliasnew = null;
    //new code for security

    if (browserName.equalsIgnoreCase("Netscape")) 
        System.out.println("Initializing Firefox");
        createPolicyFile();
        makeCfgFile();
        String strCfg = System.getProperty("user.home") + File.separator
                + "jdk6-nss-mozilla.cfg";
        System.out.println("String Configuration File " + strCfg);

        try 
            Provider p1 = new sun.security.pkcs11.SunPKCS11(strCfg);
            Security.addProvider(p1);
            System.out.println("Provider Added");
            keyStorenew = KeyStore.getInstance("PKCS11");
            System.out.println("Key Store instance created");
            keyStorenew.load(null, "password".toCharArray());
            System.out.println("Key Store loaded");
         catch (Exception e) 
            System.out.println("Certificate Not found in browser");
        
    
    if (keyStorenew != null) 
        //initBrowserCertifcates();
        Enumeration<String> enumeration = keyStorenew.aliases();
        while (enumeration.hasMoreElements()) 
            aliasnew = enumeration.nextElement();


            try 
                cerificate = (X509Certificate) keyStorenew.getCertificate(aliasnew);
                System.out.println("Certificate  found in browser========"+cerificate);
            
            catch (Exception e) 
                // TODO: handle exception
            
        
        System.out.println("Browser Certificate Initialized.");
     else 
        System.out.println("========= Keystore is NULL ==========");

    

    if(keyPairMap != null)
    
        System.out.println("keyPairMap is not  NuLL.");
        privatekey=keyPairMap.get(pubkey.toString());
    
    else
    
        System.out.println("keyPairMap is NuLL.");
       
    System.out.println("------GOT PRIVATEKEY------ " + privatekey);
    BASE64Decoder base64Decoder = new BASE64Decoder();
    byte[] encryptText = base64Decoder.decodeBuffer(text);
    System.out.println("------GOT ENCRYTEDTEXT------ "
            + encryptText.toString());
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    System.out.println("------GOT CIPHER------ " + cipher);
    cipher.init(Cipher.DECRYPT_MODE, privatekey);
    System.out.println("------CIPHET INITIALISED------ ");
    String decryptedString = new String(cipher.doFinal(encryptText));
    System.out.println("------GOT DECRYPTEDTEXT------ " + decryptedString);
    return decryptedString;

【问题讨论】:

虽然我不再使用证书。为问题 +1 当你说“它使用了旧的密钥库”时,你是说即使你删除并创建了一个新的私钥,旧的私钥也被检索到了? 是的,我使用此代码删除了一个密钥库,但没有重新启动浏览器。它显示我在重新启动浏览器后更改对密钥库的反映。 【参考方案1】:
    您可以关闭安全系统片刻并执行您想要的操作,然后再次打开它。 询问用户:如果您想继续 - 请重新启动浏览器(Microsoft 风格:D)。

【讨论】:

以上是关于不重新启动 Firefox 不会刷新密钥库的主要内容,如果未能解决你的问题,请参考以下文章

XCConfig 在 Xcode 重新启动之前不会刷新

以编程方式更改和刷新图标(无需重新启动)

CSHTML 视图在应用程序重新启动之前不会更新

Rabbitmq 无需重启即可重新加载/刷新新证书

重新定义默认 SSL 上下文时找不到 Java 密钥库

如何在不重新启动我的 Express.js 项目的情况下刷新 API 端点