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

Posted

技术标签:

【中文标题】OpenSSL 客户端证书与服务器证书【英文标题】:OpenSSL client certificates vs server certificates 【发布时间】:2014-09-05 06:55:43 【问题描述】:

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

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

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

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

    C 向 S 发起请求。 S 将其公钥发送给 C。 C验证S的身份。(服务器身份验证或服务器认证) C 将其公钥发送给 S。 S验证C的身份。(客户端身份验证或客户端认证) C 生成对称或会话密钥(例如“K”)并使用 S 公钥对其进行加密并将其发送到服务器。 现在 C 和 S 都有共享的对称密钥,用于加密数据。

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

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

我的问题如下,

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

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

【问题讨论】:

您的步骤 6 和 7 不正确。会话密钥通过密钥协商协议进行协商。它不是由客户选择的;未加密;未传输;并且没有被解密。 【参考方案1】:

服务器证书:

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

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

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

Server certifictae

服务器证书用途

x509 扩展参数明确提及

Certificate Key usage 

 1. Signing 
 2. Key Encipherment

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

Key Encipherment :- 表示证书中的密钥可用于加密为会话派生的会话密钥(对称密钥)

客户证书:-

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

客户端证书用途

x509 扩展参数明确提及

Certificate Key usage 
1. Signing 

【讨论】:

【参考方案2】:

1)您链接的文章是一篇好文章:-)。换句话说:证书中有一个字段说明允许将其用于什么用途。当您创建/请求证书时,您是在请求特定用途的证书,CA 会在此基础上对其进行签名。

将不同的证书用于不同的目的更安全,并确保每个证书只能用于其预期目的。 (或者,如果您想玩世不恭,CA 会让您购买单独的客户端和服务器证书,以便他们获得更多销售。)

例如,您可能希望您的网络服务器能够将自己标识为您的公司以提供服务,但不希望相同的证书能够用于签署与其他企业的传出连接。

2) 你是对的。

【讨论】:

以上是关于OpenSSL 客户端证书与服务器证书的主要内容,如果未能解决你的问题,请参考以下文章

openssl——自签名根证书、签名客户端和服务器证书

openssl pem证书 转换为p12类型证书

Openssl生成证书流程

OpenSSL TLS服务器-使用客户端证书白名单

使用OpenSSL实现CA证书的搭建过程

使用 OpenSSL 创建私有 CA:3 用户证书