ssl - OpenSSL 客户端证书与服务器证书

标签 ssl encryption openssl

我有一些关于证书的基本问题。先说说我对SSL认证的理解。

SSL/TLS 基本上有两个主要的东西,

  1. 身份验证 - 确保我们在两端与正确的一方通信。
  2. 加密 - 加密两端之间传输的实际数据。

证书有公钥和一些附加信息。客户端(比如“C”)和服务器(比如“S”)之间的 SSL 通信是这样工作的,

  1. C向S发起请求。
  2. S 将其公钥发送给 C。
  3. C验证S的身份。(Server identity verification or server authentication)
  4. C 将其公钥发送给 S。
  5. S验证C的身份。(Client identity verification or client authentication)
  6. C 生成对称或 session key (比如'K')并用 S 公钥加密并发送到服务器。
  7. 现在 C 和 S 都有用于加密数据的共享对称 key 。

在这里,我认为用于客户端身份验证的步骤 4 和 5 是可选的。如果我错了,请纠正我。

步骤 1 到 5 涉及非对称加密模式,即仅用于“身份验证”,之后涉及对称加密模式,用于它们之间的实际数据传输。

我的问题如下,

  1. 我已阅读此 link (与 IIS 服务器相关)有两种类型的证书。一个是客户端证书,另一个是服务器证书。我认为发起请求的客户端中的一个是客户端证书,另一个是服务器证书。客户端和服务器证书 w.r.to OpenSSL 之间有什么区别?这些证书中的 CN 名称与 OpenSSL 有什么区别吗?

  2. 我被要求使用客户端证书进行身份验证。这是否意味着我们正在绕过服务器身份验证并仅使用客户端证书进行身份验证?。我不这么认为。据我了解,除了服务器身份验证之外,还应该进行客户端身份验证。如果我在这里错了,请纠正我。

最佳答案

服务器证书:

服务器证书是服务器在 SSL 握手期间提供的身份。

通常它们是由客户熟知的证书颁发机构 (CA) 颁发的,颁发证书的基础是拥有该服务器的一些众所周知的标识符,对于 Webserver,它是服务器的主机名,用于到达服务器

Example:-  http://blog.8zero2.in/

Server certifictae

服务器证书用途

由x509扩展参数明确提及

Certificate Key usage 

 1. Signing 
 2. Key Encipherment

Signing :- 表示证书中的 key 可以用来证明证书CN中提到的服务器的Identity,即entity Authentication。

Key Encipherment :- 这意味着证书中的 key 可用于加密 session 导出的 session key (对称 key )

客户端证书:-

顾名思义,客户端证书用于识别客户端或用户。 它们用于向服务器验证客户端。 持有客户证书的目的各不相同 可能代表拥有 email address 或 Mac-address ,通常映射到证书的序列号

客户端证书用途

由x509扩展参数明确提及

Certificate Key usage 
1. Signing 

关于ssl - OpenSSL 客户端证书与服务器证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24752105/

相关文章:

google-chrome - 无法让 Chrome 版本 42 接受本地主机证书

node.js - (JWT) RSA加密/解密问题

c# - 迭代/加法 MD5

c++ - OpenSSL的DTLSv1_Listen()在运行时暂停程序

python - 禁用 Python 请求导入模块的 SSL 验证

ssl - 当两个主机都使用 ssl 时,nginx 重定向到错误的 vhost

Java Jersey 不发送 ssl 客户端证书

java - 寻找支持 Java 和强加密的存档

python - 如何使用 SSL 在 RHEL 上编译 python3?无法导入 SSL

node.js - 如何从 PKCS#12 文件中提取私钥以便进一步与 nodeJS OAuth 一起使用