我最近在使用C语言中的OpenSSL API进行实验,但是我对一些设置函数和公钥加密技术的概念感到困惑。
通常情况下,我了解公钥加密的工作原理。你有一个公钥可供所有人使用,服务器和客户端都拥有一个私钥,私钥是秘密的,必须用它来解密信息。
然而,我有点困惑于何时实际上需要公钥。例如,一个网页浏览器是否需要公钥?我认为不需要,因为在大多数情况下,只有服务器需要公钥而不是客户端。如果服务器和客户端都有公钥,那么哪个会被使用呢?
更让我困惑的是,OpenSSL API定义了一个函数SSL_CTX_use_PrivateKey_file()
,但是没有相应的SSL_CTX_use_PublicKey_file()
。在我的实验中,我编写了一个简单的Web客户端,连接到https网站并下载文件。它正常运行,并且不需要公钥。我只需使用OpenSSL命令行工具创建私钥,然后在程序中调用SSL_CTX_use_PrivateKey_file()
。
但是,如果我编写的是一个服务器而不是客户端,我不需要公钥吗?如果需要,为什么OpenSSL API中没有类似于use_PublicKey_file
的东西呢?
SSL_CTX_use_PrivateKey_file()
,那么用于解密消息的私钥是什么?OpenSSL会为每个会话即时生成一个私钥吗? - Channel72