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
Linux OpenSSL私有、公钥和证书,我到底要向客户端发送什么?_Linux_Ssl_Boost_Openssl - Fatal编程技术网

Linux OpenSSL私有、公钥和证书,我到底要向客户端发送什么?

Linux OpenSSL私有、公钥和证书,我到底要向客户端发送什么?,linux,ssl,boost,openssl,Linux,Ssl,Boost,Openssl,我从SSL开始 我已经创建了符合和示例的服务器和客户端应用程序 在internet上搜索有关密钥和证书的一些信息。 找到这个命令openssl-req-x509-nodes-days 365-newkey rsa:1024-keyout mycert.pem-out mycert.pem,我在服务器端和客户端都使用了这个命令,它似乎可以工作 我打开cert.pem文件,发现该文件同时包含私钥和证书数据。我认为分发私钥是件坏事,所以我所做的一定是出了什么问题。我在里面没有看到公钥 然后我找到了关于

我从SSL开始

我已经创建了符合和示例的服务器和客户端应用程序

在internet上搜索有关密钥和证书的一些信息。
找到这个命令
openssl-req-x509-nodes-days 365-newkey rsa:1024-keyout mycert.pem-out mycert.pem
,我在服务器端和客户端都使用了这个命令,它似乎可以工作

我打开cert.pem文件,发现该文件同时包含私钥和证书数据。我认为分发私钥是件坏事,所以我所做的一定是出了什么问题。我在里面没有看到公钥

然后我找到了关于如何创建私钥的简短指南。一切都好(我拒绝使用要求密码的版本)。现在我看到文件只包含私钥

下一个

我找到了关于证书的简短指南。在步骤4之后,我使用先前生成的私钥创建了一个证书。检查文件,确认其中只有证书数据。伟大的我开始思考,我终于需要一个公钥,我可以发送到客户端机器。然后我注意到,在该指南中,它说
证书通过包含公钥与公钥加密相关。
Hmm,我用名为“查看文件”的应用程序打开文件,它显示了我在创建证书时输入的证书详细信息,其中有一个名为“公钥”的部分,其中包含数据

所以,当我认为我一切都很好并且完成时,我将这个证书文件发送到客户机,运行服务器(OK),运行客户机(FAIL),说握手失败了

然后,我很快找到一个命令,用我的私钥创建一个公钥。将其附加到证书文件并发送到客户端。服务器(正常),客户端(正常)。因此,它似乎无法从证书中提取公钥

然后我尝试在客户端只使用公钥,而不使用证书。客户端失败,所以它必须同时具有公钥和证书。如果我一时失明,我检查了生成的公钥和证书中的公钥数据,发现它们不匹配

因此,问题是,将公钥与证书连接发送到客户端是否正确?
为什么客户端应用程序不在证书本身内部使用公钥?
整个事情我都做对了吗。
服务器和客户端之间的所有通信是否都以这种方式安全(在服务器上使用private+cert,在客户端使用pubic+cert)

任何人都可以打开.pem文件(使用上述“查看文件”程序)并读取证书内容(如国家、城市、组织等)。证书是否应该像这样提供

编辑1

根据目前的回答,我发现我提供的信息太少了。我将在这次编辑中尝试这样做

我对SSL没有任何经验,在这项工作之前我所知道的就是SSL通过加密使浏览器和web服务器之间的连接安全

我的任务是升级我们的服务器以包含SSL。服务器简介:

它是一款以linux为平台的硬件+软件。它是一台工业型PC。该软件作为服务器工作,没有GUI,通过TCP/UDP发送和接收数据

我的任务是将SSL连接安全性包含到服务器中,这样购买服务器的客户机就可以连接到他们的客户机并拥有加密连接。有人告诉我,没有人希望他们的证书存储在第三方CA中,所以这意味着我确实需要对其进行自签名。据我所知,客户端必须将证书包含到受信任区域(某种方式),因此我需要以某种方式将证书发送到客户端,无论是让他们手动从服务器抓取文件,还是使用某种半自动方式

我正在尽我所能使用boost,所以我决定也使用SSL功能。这就是为什么我检查了提供的示例。实际的客户端可能会使用一些我无法控制的不同的东西,因此我不知道他们在“客户端SSL”中将使用什么

否。它通过相互协商的对称密钥进行保护,该密钥具有 与PKI密钥无关

嗯,也许我从一开始就做错了。我的最终目标是使用SSL加密连接。最大的问题是:我需要证书吗

我以为就是这样,我的意思是私钥/公钥+证书是加密所需要的。但如果我这样想是错误的,我需要开始更深入地研究

在互联网上搜索有关钥匙和钥匙的信息 证书。找到此命令openssl req-x509-nodes-days 365 -newkey rsa:1024-keyoutmycert.pem-out mycert.pem,我在服务器端和客户端都使用了它,它似乎可以工作

OpenSSL命令
OpenSSL req…
创建证书签名请求。它的意思是由一个受信任的权威机构签署。但是,您使用了
opensslreq-x509…
-x509
选项创建自签名证书(而不是由授权机构签名的请求)

这对于下一次观察很重要


所以,当我认为我一切都很好并且完成时,我发送了这个证书文件 对于客户端计算机,运行服务器(OK),运行客户端(FAIL),表示 握手失败

使用相互身份验证时,会发生两种情况。首先,服务器ca发送它接受的可信机构列表,以认证客户端。该列表是可分辨名称的集合。其次,客户机发送其证书(如果它有一个匹配的证书)

由于您的客户端证书是自签名的,因此无法告知服务器信任某个机构(并且服务器无法发送受信任的自签名证书列表)

我从未对自签名客户端使用过相互身份验证