Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
服务器如何加密?(特别是openSSL)_Ssl_Openssl_Rsa_Pki - Fatal编程技术网

服务器如何加密?(特别是openSSL)

服务器如何加密?(特别是openSSL),ssl,openssl,rsa,pki,Ssl,Openssl,Rsa,Pki,我有一个关于SSL中公钥认证的高级问题(在openSSL上做一个学校项目)。无论如何,据我所知,SSL基本上就是这样工作的 服务器使用RSA或DSA创建私钥。使用私钥创建公钥,并将公钥添加到其证书中。证书自签名或发送给证书颁发机构进行数字签名 当客户端希望连接到服务器时,它请求证书,检查其是否受信任,然后使用证书公钥加密其消息。消息被发送到服务器并使用私钥解密 这就是我的问题所在。服务器如何安全响应?公钥是公开的,所以如果它用私钥加密,并期望客户端使用公钥解密,中间的人也可以解密。我能看到的唯一

我有一个关于SSL中公钥认证的高级问题(在openSSL上做一个学校项目)。无论如何,据我所知,SSL基本上就是这样工作的

服务器使用RSA或DSA创建私钥。使用私钥创建公钥,并将公钥添加到其证书中。证书自签名或发送给证书颁发机构进行数字签名


当客户端希望连接到服务器时,它请求证书,检查其是否受信任,然后使用证书公钥加密其消息。消息被发送到服务器并使用私钥解密

这就是我的问题所在。服务器如何安全响应?公钥是公开的,所以如果它用私钥加密,并期望客户端使用公钥解密,中间的人也可以解密。我能看到的唯一解决方案是角色颠倒,客户机变成服务器,反之亦然


有人在这里有指导吗?我会很感激的

公钥可用于加密预主密钥(在1.3之前的TLS版本中),该密钥可由服务器解密。一组对称密钥(例如AES密钥)随后从该预主密钥派生。该键可用于后续信息。这也称为混合加密,因为它同时涉及非对称(公钥/私钥)和对称(单密钥)加密

或者,私钥可用于使用包括短暂Diffie-Hellman的认证协议进行认证。Diffie-Hellman是一种非对称算法(与RSA类似),可用于在不让窃听者获得密钥知识的情况下同意预主密钥。短暂意味着Diffie-Hellman密钥不是持久的,换句话说,每次都执行完整的DH协议。在这种情况下,RSA用于使用签名而不是加密进行身份验证。该协议的特性是,即使私钥稍后公开,SSL协议也无法解密(这称为前向保密)


所以答案是RSA并不是用来加密所有数据的,它只是在建立对称会话密钥的过程中使用。这些密钥用于加密后续消息中的数据(并保护其完整性和真实性)。请注意,如果在SSL/TLS中使用RSA,则这取决于所选的密码套件。

您是对的。任何人都可以解密由服务器加密的消息(私钥),因为它们具有相应的公钥。但是,这里有一定程度的安全性,因为只有相应的公钥才能解密由私钥加密的数据。因此,客户端可以确保消息确实是由服务器发送的,因为只有服务器具有私钥(理想情况下)。

此外,TLS/SSL协议不仅依赖于非对称加密(计算成本很高),它还用于密钥交换,以交换用于导出会话所用密钥的数据不会传输实际密钥。

在SSL中,公钥不用于加密会话密钥。@EJP稍微简化了一些,我同意,已修复。这个问题似乎属于堆栈交换网络中的另一个站点,因为它与编程无关。或者,“当客户端希望连接到服务器时,它会请求证书,检查其是否受信任,然后使用证书公钥对其消息进行加密。消息会发送到服务器并使用私钥解密。”-这从部分不正确到完全不正确不等(取决于声明和一些上下文)。有一个非常平易近人的解释。你们学校的图书馆有吗?@jww我同意,我已经将它标记为迁移。“任何人都可以解密服务器加密的消息(私钥),因为它们有相应的公钥。”这就是为什么“乱码”使用私钥不是加密,而是signing.Semantics,但仍然需要注意。