为了账号安全,请及时绑定邮箱和手机立即绑定

此代码是否支持相互身份验证,如果是,如何触发它?

此代码是否支持相互身份验证,如果是,如何触发它?

慕桂英3389331 2023-06-08 19:40:49
问题 1>所以我在服务器上使用了与客户端信任库相同的密钥库,这是由命令“ keytool -genkey -alias signFiles -keystore examplestore ”生成的。这里发生了什么 ?。客户端如何从该示例库(服务器的密钥库但客户端的信任库)文件中选择受信任的 CA,或者更恰当地说,密钥库如何充当信任库以及该文件究竟由什么组成?所以我所知道的是,密钥库具有公钥和私钥对以及证书。对于当前情况,它尚未由 CA 签署证书。问题 2>因此,我们需要创建该 .crt 文件并由 CA 对其进行签名,然后再次将其嵌入到 keyStore 中。嵌入crt文件就是导入.这样理解对吗?自签名证书是什么意思?命令“ keytool -genkey -alias signFiles -keystore examplestore ”是否创建自签名证书?我还尝试为客户端附加密钥库,为服务器附加信任库,它在运行相应代码时在参数中引用由命令“ keytool -genkey -alias signFiles1 -keystore exampstore1 ”生成的相同文件。代码成功运行。我还尝试使用参数,例如将服务器的信任库更改为不验证客户端密钥库的内容。但代码仍然有效。但是当我尝试更改不验证服务器密钥库的客户端的信任库时,代码抛出以下异常“javax.net.ssl.SSLHandshakeException:收到致命警报:certificate_unknown”。主要问题:问题 3> 这是否意味着它不触发相互认证,如果是,如何使其触发?它首先支持相互身份验证吗?
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

首先,我们要明确几点:

  • 文件JKS由条目组成,其中每个条目是 aPrivateKeyEntrytrustedCertEntry. (对称密钥还有其他类型,是的,但是在讨论公钥密码学时让我们忘记它们。)

  • 当您运行时genkey,您将生成一个私钥条目。如您所料,它包含私钥和公钥。

  • 您可以仅从私钥条目中导出公钥,然后将其导入另一个JKS,这一次证明是受信任的证书条目,因为它只包含公钥。

  • 每个生成的证书最初都是自签名的。仅当使用另一个私钥条目(CA 的)对其进行签名时,它才不是自签名的。受信任的证书条目可以是自签名的或 CA 签名的。根 CA 证书始终是自签名的。

  • 使用JKSas truststore 意味着您信任其中的条目,无论它们是自签名的还是 CA 签名的。您可以创建自己的 CA,将其公钥导入文件JKS并将其用作您的信任库。这意味着您只信任由您的 CA 签署(直接或间接)的证书。(间接意味着有中间证书由您的 CA 签名并再次用于签署其他证书。)

现在回答你的问题,

Q1

如上所述,使用密钥库作为信任库意味着“信任其中的条目”,因此它可以工作。无需由另一方(即 CA)签署。

Q2

“嵌入crt文件就是导入.这样理解对吗?”

是的。

“命令‘keytool -genkey -alias signFiles -keystore examplestore’是否创建自签名证书?”

是的。

关于使用不同密钥库和信任库配置的试验:在典型SSL设置中,只有服务器具有私钥并出示其证书。只有客户端验证服务器,反之亦然。如果服务器被配置为要求证书(这是可能的),那么您在浏览网站时必须选择您的私钥https。验证客户的情况很少见。这就是为什么向客户端提供密钥库和向服务器提供信任库都没有效果的原因。仅当您向客户端提供无效的信任库时,它才会失败。


查看完整回答
反对 回复 2023-06-08
  • 1 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信