如何在消息Java中验证数字签名?

如何在消息Java中验证数字签名?,java,jira,jakarta-mail,digital-signature,jira-plugin,Java,Jira,Jakarta Mail,Digital Signature,Jira Plugin,我尝试在Java上为Jira定制邮件处理程序,如果消息有签名,它必须验证消息的数字签名。但我不明白怎么做 我有javax.mail.Message消息,如何检查它是否有签名 如果消息有签名来验证这一点,据我所知,我必须这样做: //创建签名实例 Signature=Signature.getInstance(“SHA256withRSA”); //初始化签名对象以进行使用公钥的验证 签名。初始化验证(公钥); //将收到的消息字节添加到签名对象 字符串body=MailUtils.getBody

我尝试在Java上为Jira定制邮件处理程序,如果消息有签名,它必须验证消息的数字签名。但我不明白怎么做

  • 我有
    javax.mail.Message消息
    ,如何检查它是否有签名

  • 如果消息有签名来验证这一点,据我所知,我必须这样做:

  • //创建签名实例
    Signature=Signature.getInstance(“SHA256withRSA”);
    //初始化签名对象以进行使用公钥的验证
    签名。初始化验证(公钥);
    //将收到的消息字节添加到签名对象
    字符串body=MailUtils.getBody(消息);
    byte[]messageBytes=body.getBytes();
    签名更新(messageBytes);
    //最后,检查签名
    布尔值isCorrect=签名。验证(接收签名);
    

    但如何从receivejavax.mail.Message中获取算法、公钥和receivedSignature

    仅使用
    javax.mail.Message
    ,签名邮件不容易(至少可以这么说!)处理,因为在邮件签名方面有很多东西(请参见PKCS7、CMS和S/MIME标准)。我建议切换到更高级别的库,例如BouncyCastle。您可以在这里或其他地方找到官方代码示例:,不幸的是,在jira插件中,我只能使用javax.mail.Message。该方法
    public boolean handleMessage(Message Message,MessageHandlerContext)
    通过
    javax.mail.Message
    自动调用。或者我可以将消息包装到BouncyCastle?是的,您可以:哦,谢谢,我会尝试。