我正在尝试用Java执行相互身份验证。我试图实现的结构是:具有自签名证书的服务器充当CA,对客户端证书进行签名。因此,这就是我在每个密钥库/信任库中保存的内容:
客户:
密钥库:
信任库:
服务器
密钥库:
信任库:
我能够执行服务器的身份验证,但当我在服务器上启用setNeedClientAuth(true)时,我在日志中看到以下错误:http://pastebin.com/raw.php?i=P52Qq89z因此,服务器似乎在进行身份验证,但客户端无法提供CA链,这可能是其密钥库的内容有问题吗?
我使用openSSL来生成密钥和证书,使用KeyStore Explorer来创建密钥库(在几天不成功地使用keyool之后)和JDK 1.7。0_51
更新:按照以下说明解决了问题:https://stackoverflow.com/a/12150604/2891462这是如何创建CA自签名证书的问题(显然,这只是JDK1.7中的一个问题)。
对于相互身份验证(2路SSL),只需要做两件事情
从服务器的密钥库导出的服务器证书(不是信任存储-如果您使用的是不同的信任和密钥存储)
其次是
客户端的证书应该存在于服务器的信任库中(而不是密钥库-以防您使用不同的信任和密钥库)
此外,这里还有一个很好的博客,可以读到同样的内容
您的配置中有几处错误。
查看调试日志时,证书没有表示CA=true的基本约束。
[
Version: V1
Subject: CN=Ficticious bank, OU=SoE, O=University, L=London, ST=England, C=UK
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
Key: Sun RSA public key, 2048 bits
Validity: [From: Wed May 07 19:21:23 BST 2014,
To: Thu May 07 19:21:23 BST 2015]
Issuer: CN=Ficticious bank, OU=SoE, O=University, L=London, ST=England, C=UK
SerialNumber: [ 9a7143cf f5ecfbf8]
]
Algorithm: [SHA1withRSA]
...
]
如果不是CA证书,它就不能作为CA工作。见RFC 3280(和5280):
This extension MUST appear as a critical extension in all CA
certificates that contain public keys used to validate digital
signatures on certificates.
其次,您还希望用作服务器的最终实体证书(EEC)的此证书没有该服务器的有效名称:没有使用者替代名称,而且CN明显与任何主机名都不匹配。虽然默认的SSLSocket
在默认情况下不进行任何主机名验证(您可以对其进行配置),但为服务器证书提供有效的主机名是很有用的,因为客户端原则上应该真正验证它。
总的来说,对CA和服务器证书使用完全相同的证书似乎没有多少好处。自签名证书在单独使用时非常有用。如果您也打算将其用作CA证书,那么最好将CA证书和服务器证书分开。从长远来看,它肯定是有用的,尤其是当您必须在您的示例中的“Thu May 07 19:21:23 BST 2015”更改服务器证书时,或者如果您可能需要出于任何其他原因重新颁发服务器证书。
除此之外,您对密钥存储和信任存储有正确的想法:
>
>
密钥库:
信任库:
服务器
>
密钥库:
信任库:
我没有找到任何关于在前端端实现逻辑来管理Azure密钥库的可能性的信息。同时,我创建了一个Node JS服务器项目使用ENV来管理Azure Key Vault,它工作成功,但我想在我的Angular应用程序中得到同样的效果。
对于PGP想要使用的签名和加密密钥,我是否可以使用2个JCE、RSA或DSA keypairs?把它们保存在密钥库中,当我想使用这些密钥时,只需按需重建PGP基础结构?
我有一个premium storage account,在创建这个帐户后我就启用了加密,我找到了这个链接https://docs.microsoft.com/en-us/azure/storage/storage-service-encryption来检查blob是否加密。 现在,如果我使用Azure key vault加密OS盘和数据盘,它也用于保护静止数据,但加密存储帐户也会做同样的事情。有谁
证书、私钥(客户端)和客户端证书都是pem格式的,我必须将它们添加到信任存储区和密钥存储区中。我该怎么做呢?到目前为止,我在cmd(windows)中有命令: > 要生成PKC(key:客户端私钥,cert:客户端cert,CA:CACERT):openssl pkcs12-inKey key.pem-in cert.pem-export-out keystored.p12-certfile CA
同一空间/存储库中机密的逻辑分组 HSM的可能性 日志记录/审核 检索/更改机密的一个位置,许多应用程序可能依赖该位置而不触及应用程序。 我不知道如何在我的Spring Boot应用程序中处理存储库访问。当我使用azure-key-vault spring boot Starter时,我必须设置Applications.Properties中的访问权限,如本教程:如何使用spring boot S
问题内容: 我需要将2个密钥存储到KeyStore中,这是相关代码: 尽管我得到了执行,但“私钥必须带有证书链” 那到底是什么?以及我将如何生成它? 问题答案: 您还需要提供私钥条目的证书(公钥)。对于由CA签名的证书,链是CA的证书和最终证书。对于自签名证书,您只有自签名证书。 示例: 要生成证书,请点击以下链接: 示例: