我需要使用 SignServer 代表客户端创建数字签名。我对2个问题有点困惑。
- 每个客户都需要一个唯一的证书还是可以为所有客户使用一个证书?
- 我可以使用 SignServer 创建数字签名证书吗,因为我在他们的文档中找不到类似的东西。如果否,从服务器端应用程序创建数字签名证书的建议方法是什么?
提前致谢
我需要使用 SignServer 代表客户端创建数字签名。我对2个问题有点困惑。
提前致谢
1)是否每个客户都需要一个唯一的证书,或者一个证书可以用于所有人?
我不知道这个项目,但阅读文档
SignServer 是服务器端签名服务器。每个用户的单独签名密钥或组织的一个中央密钥
所以,看你的需求。如果您想识别每个签名者,请使用单独的证书。在其他情况下,使用中央证书。但并不是证书存储在中央服务器中。它们不分发给用户。您将需要一个中央存储库。建议使用加密硬件 (HSM)。您需要为用户生成凭据,以便他们可以使用证书
2) 我可以使用 SignServer 创建数字签名证书吗,因为我在他们的文档中找不到类似的东西。如果否,从服务器端应用程序创建数字签名证书的建议方法是什么?
通常签名解决方案不与公钥证书颁发机构耦合来颁发证书。看看这个链接
EJBCA : https://www.ejbca.org/用于颁发证书的已知 PKI 证书颁发机构软件。它是一个 J2EE 开源解决方案
专家 PKI 教程:它是一组基于 OpenSSL 的脚本,用于建立证书颁发机构
当然,您也可以使用Bouncycastle构建自己的集成解决方案。根据要颁发的证书数量和 CA 的复杂性来选择它
这个问题也在SignServer 论坛中得到了解答:
多个签名者可以共享相同的密钥对和证书。只需将它们指向相同的加密令牌和密钥,并为它们配置相同的证书。
证书不打算由 SignServer 创建。生成密钥对后,您可以获得证书签名请求 (CSR),您可以将其提交给可以为您颁发证书的证书颁发机构 (CA)。
对于测试,或者如果您的组织中没有 CA,并且如果您不想从商业 CA 购买证书,您可以使用 EJBCA ( ejbca.org ) 或 OpenSSL等软件设置自己的 PKI .
由于签名必须通过网络传递,我们将其转换为字符串,但出于安全考虑,我们不能只使用原始字节数组的字符串。因此,我们对字节数组进行操作并转换为不同的字符串。我们不应该发送 new String(byte [] signature),我们应该发送 new String(Base64.encode(byte[] signature))
公式为:data.getByte() + 私钥 → 签名
您可以从中学到更多,该链接非常有帮助。 http://javaint4bytes.blogspot.com/2018/04/java-signature-certificates.html