我正在尝试对http-web响应进行数字签名。基本上,我创建HTML和多部分内容类型响应,签署响应然后将数字签名附加到响应。我认为我很接近,但是由于附加的签名实际上是HEXtoString,因此这不是真正的PGP签名。重要的是能够正确表示签名,以便正确解释响应。可以在这里使用一些建议,因为我对此非常环保。在此先感谢..下面是我现在使用的代码片段。
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表示之外的字符。想法?
答案 0 :(得分:0)
如何将验证码下载到客户端?有关该应用程序的更多详细信息?如果它是通过HTTP下载的验证脚本,那么该方案从根本上被打破。您可能需要使用SSL,特别是如果您已经这样说过的话。
在不了解您的系统的情况下,听起来像是中间人攻击的对手只需要:
更不用说所有通信都是纯文本的(希望没有传输个人/敏感信息?)
SSL解决此问题,因为所有证书都必须由Web浏览器信任/安装的根证书颁发机构签名。 CA应该只向控制/拥有它们的人颁发域证书;因此,先前的攻击不起作用。
现在,如果您的客户端以可信方式安装,以便攻击者无法篡改它,那么您可以继续使用您的方案并仍然是安全的。例如,如果客户端手动安装在客户端PC上,或者通过其他方式安全地交付(例如通过SSL和/或使用代码签名)。
(我注意到对MD5哈希的引用。不要使用MD5哈希值; MD5已被破坏。)
答案 1 :(得分:0)
此问题归因于NAESB-EDI标准。在http请求中提交文件的位置,我们需要生成特定的响应。我们使用SSL,原始有效负载应该加密。响应是简单的html(4项),并附有响应的数字签名。我想要做的是创建响应,让现有的pgp软件根据生成的响应创建签名,然后将签名附加到响应。因此,我不再使用MD5,而且我没有公开使用密钥(除了那些我们专门交易的密钥)。因此,詹姆斯回答是部分正确的,如果没有SSL,由于回复是明文,因此几乎没有提供任何防止嗅探的保护。然而,如果请求中没有所需的信息,他们甚至不会得到适当的回应。可能不会得到回应(更不用说合适的了)。