gpt4 book ai didi

java - 在 Java 中对 Web-http 响应进行数字签名(使用 pgp)

转载 作者:行者123 更新时间:2023-12-01 05:51:34 24 4
gpt4 key购买 nike

我正在尝试对 http - Web 响应进行数字签名。本质上,我创建 HTML 和多部分内容类型响应,对响应进行签名,然后将数字签名附加到响应中。我想我已经很接近了,但还差几步,因为这不是真正的 PGP 签名,因为附加的签名实际上是 HEXtoString。重要的是能够正确表示签名,以便可以正确解释响应。可以在这里使用一些建议,因为我对此相当陌生。提前致谢..下面是我现在使用的代码片段。

    StringBuffer myResponse = new StringBuffer("");
myResponse.append(getHttpHeader());
KeyPair pair2 = loadKeyPair();//loads a key pair from generated files

if (signer==null)
signer = Signature.getInstance("MD5withRSA");
signer.initSign(pair2.getPrivate());
signer.update(message.getBytes());
byte[] b = signer.sign();
FileOutputStream sigfos = new FileOutputStream(getFileLocation(0,localTest));
sigfos.write(b);
sigfos.close();
//verify
signer.initVerify(pair2.getPublic());//pubKey);
signer.update(message.getBytes());
if (signer.verify(b)){
myResponse.append(message);
}
<小时/>
    StringBuffer signed= new StringBuffer("");
signed.append(boundary);
signed.append(CRLF);
signed.append("content-type: application/pgp-signature");
signed.append(CRLF);
signed.append("-----BEGIN PGP MESSAGE-----");
signed.append(CRLF);
signed.append("Version: 1");//update this
signed.append(CRLF);
signed.append(CRLF);

signed.append(digSignature);//generated as HexString representation of signed file from above
signed.append(CRLF);

signed.append("-----END PGP MESSAGE-----");
signed.append(CRLF);
signed.append(boundary+"--");
<小时/>
            myResponse.append (signed);
ServletOutputStream.println(myResponse);
<小时/>

传输的结果“签名”是签名文件的字节散列 hexToString 表示形式。我正在使用标准 java 类,但不确定其他库是否会给我一个真正的 PGP 表示,其中包含 0-9a-f 表示之外的字符。想法??

最佳答案

验证码是如何下载到客户端的?有关相关应用程序的更多详细信息?如果它是通过 HTTP 下载的验证脚本,那么该方案就从根本上被破坏了。您可能需要使用 SSL,特别是如果您已经这样争论过。

在不了解有关您的系统的更多信息的情况下,听起来中间人攻击中的对手只需:

  1. 将验证码中的公钥替换为自己的公钥。
  2. 使用自己的签名放弃所有“安全”通信。
  3. 您的脚本没有发现任何错误,因为它检查的公钥已被对手修改。

更不用说所有通信都是纯文本形式(所以希望没有传输个人/敏感信息?)

SSL 可以解决此问题,因为所有证书都必须由受 Web 浏览器信任/随 Web 浏览器安装的根证书颁发机构签名。 CA 应该只向控制/拥有域的人颁发域证书;因此,之前的攻击不会起作用。

现在,如果您的客户端以可信方式安装,使得对手无法篡改它,那么您可以继续您的方案并且仍然安全。例如,如果客户端手动安装在客户端 PC 上,或者以其他方式安全交付(例如通过 SSL 和/或使用代码签名)。

(我确实注意到对 MD5 散列的引用。不要使用 MD5 散列;MD5 已被破坏。)

关于java - 在 Java 中对 Web-http 响应进行数字签名(使用 pgp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4522312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com