代码之家  ›  专栏  ›  技术社区  ›  Sietse

Java安全-MSCAPI提供程序:如何在没有密码弹出的情况下使用?

  •  7
  • Sietse  · 技术社区  · 16 年前

    我已经设法使用 Sun's MSCAPI provider 在我的申请中。我现在的问题是,它总是弹出一个窗口,要求输入密码,即使我在代码中提供了密码。这是一个问题,因为我需要Web服务中的加密功能。

    这是我现在的代码:

    String alias = "Alias to my PK";
    char[] pass = "MyPassword".toCharArray();
    
    KeyStore ks = KeyStore.getInstance("Windows-MY");
    ks.load(null, pass);
    Provider p =  ks.getProvider();
    
    Signature sig = Signature.getInstance("SHA1withRSA",p);
    PrivateKey key = (PrivateKey) ks.getKey(alias, pass)
    
    sig.initSign(key);
    sig.update("Testing".getBytes());
    sig.sign();
    

    这工作得很好,但当最后一行运行时,我会收到一个弹出窗口,要求输入密码。我该如何防止这种情况?

    3 回复  |  直到 15 年前
        1
  •  4
  •   Rasmus Faber    16 年前

    MSCAPI提供程序不支持向CAPI提供密码:

    假定必须提供密码的应用程序支持兼容模式。它允许(但忽略)非空密码。默认情况下,该模式处于启用状态。 (1)

    要通过CAPI设置密码,您必须致电 CryptSetKeyParam 使用未记录的KP_KEYEXCHANGE_PIN或KP_SIGNATURE_PIN,并希望您的底层硬件令牌提供商支持它。(它们并非完全未记录-Windows CE和Windows Mobile的文档中提到了它们 (2) 并且它们被包括在头文件中)。

        2
  •  1
  •   Hes Siemelink    16 年前

    我的猜测是Windows正在弹出弹出窗口。

    使用证书导入向导再次导入密钥,但请确保您没有选中“密码”屏幕上的以下选项。

    [_]启用强私钥保护。如果启用此选项,每次应用程序使用私钥时都会提示您。

        3
  •  0
  •   ugo Manoj Saxena    11 年前

    我通过设置提供程序解决了这个问题,如下所示:

    signeData = gen.generate(content, ks.getProvider());

    哪里

    ks 是a KeyStore

    gen 是a CMSSignedDataGenerator