java.security.NoSuchProviderException:没有为S / MIME配置的提供程序

时间:2012-10-05 23:02:25

标签: java java-ee pkcs#12

我一直试图解决我的问题,但我不能u_u

嗯,让我们看看。我需要发送一封电子邮件(我可以做),但最后一个要求是我需要附加证书(SSL),这就是问题所在。这是我的代码:

        // @param _smimePw         keystore password = "techbrainwave"
    // @param _alias         keystore password = "certificatekey"

    // get the S/MIME EncryptionUtilities
    ##EncryptionUtils smimeUtils = EncryptionManager.getEncryptionUtils(EncryptionManager.SMIME);##

    // load the S/MIME keystore from the given file.
    char[] smimePw = new String("techbrainwave").toCharArray();
    EncryptionKeyManager smimeKeyMgr = smimeUtils.createKeyManager();
    smimeKeyMgr.loadPrivateKeystore(new FileInputStream(new File("C:\\j2sdk1.4.2_18\\bin\\truststore.jks")), smimePw);

    // get our keys.
    java.security.Key smimeKey = smimeKeyMgr.getPrivateKey("certificatekey", smimePw);

    msg.setContent(parts);

    // write smime message.
    MimeMessage smimeSignedMsg = smimeUtils.signMessage(mailSession, msg, smimeKey);
    Transport tr = mailSession.getTransport("smtp");
    tr.connect(SMTPServer, "", "");
    smimeSignedMsg.saveChanges(); // don't forget this
    tr.sendMessage(smimeSignedMsg, smimeSignedMsg.getAllRecipients());
    tr.close();

标记的行是以下异常使我的代码失效的地方:

  

java.security.NoSuchProviderException:没有为S / MIME配置的提供程序       at net.suberic.crypto.EncryptionManager.getEncryptionUtils(EncryptionManager.java:99)

我从这个链接中拿了例子:

http://blog.jservlet.com/post/2008/01/03/How-to-use-Javamail-Crypto-with-S/MIME-provider?pub=0#pr

我希望你能帮助我。我有两天这个问题,我不知道问题出在哪里。我尝试做的是将SSL证书附加到我的邮件,这是我的问题的简历。如果有另一种方法可以解决它,我将很高兴看到它。

提前致谢。

问候。

2 个答案:

答案 0 :(得分:0)

此错误java.security.NoSuchProviderException表示未找到提供此服务的组件 我不确定java的默认提供程序是否真的提供此功能。如果您已经交换到不受限制的文件,我猜您需要第三方提供商 使用Bouncy Castle并通过快速谷歌搜索在您的案例中需要mention以下(对于像您这样的问题):

javamail-crypto.jar  

javamail-crypto-bouncycastle-smime.jar  

and bouncy castle libraries.

答案 1 :(得分:0)

当我使用BouncyCastle库“..jdk15on-149.jar”时,我遇到了同样的异常。 但是使用旧版本“..jdk16-1.46.jar”它起作用了:)