java - 用户使用其私钥对数据进行签名/时间戳记的最佳方式是什么?

标签 java digital-signature digital-certificate trusted-timestamp

我对安全问题还是个新手,所以我的问题实际上可能只是一个误解。

我正在使用的系统要求用户应在 Web 应用程序中的某个位置对数据进行签名/时间戳记。 然而,为了使用数字证书进行签名,用户应该在系统上输入他们的私钥。 鉴于涉及第三方的事实,我们作为一家公司应该保证只有最终用户才被允许签署/时间戳数据。

我看到的唯一方法是创建一个可以验证数据的桌面应用程序。但我仍然需要在某个地方具有时间戳功能,这需要与外部服务器进行通信,这可能是我们公司“窃取”他们的私钥的一种方式。

互联网上(尤其是网络应用程序上)是否存在对数据进行签名/时间戳记的模式?如何实现?

最佳答案

所以你有一个服务器和用户。用户在其系统上对数据进行数字签名。时间戳与签名一起完成(证明签名时间)。时间戳由受信任的第三方 TSA(时间戳机构)执行。进行签名的代码将联系 TSA(通常使用 HTTP 或 HTTPS 协议(protocol)),并且将以这种方式执行时间戳。 TSA 的证书包含在时间戳中,以便稍后可以验证时间戳。

现在谈谈技术方面。对于 Web 应用程序,您最好的选择是创建一个小程序或 ActiveX 控件,它将下载到用户的浏览器并进行签名。

我们公司为此提供了预先创建的解决方案,我在this answer中详细描述了它。 。

当然,您可以让用户下载文档并使用 Acrobat 或其他客户端应用程序对其进行签名,然后将文档上传回来。如果您决定自己编写此类应用程序,则需要签名组件,例如。 IText 或我们的 SecureBlackbox

关于java - 用户使用其私钥对数据进行签名/时间戳记的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14893780/

相关文章:

java JMenuItem NullpointerException(覆盖 swing 类时初始化错误)

java - 在 iOS-Objective C 上签名的数据在 Java 中验证时始终返回 false

java - 如何使用x509证书生成数字签名?

java - (Java) 在 Mac OS X 上以编程方式访问 "System Roots"下的 SSL 证书

java - 为什么我的 HashMap 有重复的键?

Java telnet登录: stuck after sending user name

encryption - 什么是常见的 RSA 符号指数?

c# - 不带参数的 RSASSA-PSS 使用 SHA-256 .Net 4.5 支持

java - Linux 中的 SMTP/POP3 客户端

java - android自定义列表不显示