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

Java安全- MSCAPI提供程序:如何使用无密码弹出窗口?

  •  6
  • 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 回复  |  直到 16 年前
        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 年前

    我猜是窗户弹出了。

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

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

        3
  •  0
  •   ugo Manoj Saxena    11 年前

    我解决了如下设置提供程序的问题:

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

    在哪里?

    ks 是一个 KeyStore

    gen 是一个 CMSSignedDataGenerator