在生成OpenSSL密钥时,要为commonName添加什么?

2024-10-01 17:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个应用程序框架,它在网络上的未命名主机之间以对等方式工作。我想对流量进行加密,所以我用M2Crypto实现了一个设置,但是遇到了一个障碍。我不知道在创建证书时要为“commonName”写什么。它似乎需要一个域名,但没有一台运行这个的计算机有一个域名。我只是把'temphost'作为commonName,但显然这是一个重要的参数。我在试着测试的时候发现了这个:

M2Crypto.SSL.Checker.WrongHost: Peer certificate commonName does not match host, expected 127.0.0.1, got temphost

有没有一种方法可以概括通用名?在


Tags: 网络框架应用程序ssl参数计算机方式流量
2条回答

因此,根据你对我第一个答案的评论,我决定提供另一个可能适合你的解决方案。创建您自己的CA证书和密钥。然后,在您的同级中,告诉M2Crypto只接受由这个CA签名的证书(请参阅这个旧的stackoverflow问题,以供api使用:What is the difference between M2Crypto's set_client_CA_list_from_file() and load_verify_info() and when would you use each?)。在

然后在脚本的早期执行以下操作:

from M2Crypto import SSL
SSL.Connection.clientPostConnectionCheck = None

或者,如果您需要能够建立其他类型的SSL连接,请查看是否可以控制SSL连接对象并使用适当的检查器调用它们的set_post_connection_check_callback()。在

在此之后,只要对等方的证书仅与您的CA签署,您的对等方就应该接受任何其他对等方。在

如果你能想到在连接后检查中可以验证的任何额外信息,你可以将这些信息放入证书中(也许在commonName中),并编写自己的检查器来使用(而不是上面没有)。在

在您的用例中,默认主机名检查是不合适的。您可能想尝试只进行证书指纹检查。首先,获取每个证书的指纹(opensslx509-fingerprint)。假设有对等点A和对等点B,分别有指纹A和指纹B。在

在对等端,您将在脚本的早期进行以下调用:

from M2Crypto import SSL
SSL.Connection.clientPostConnectionCheck = SSL.Checker(peerCertHash='fingerprint B')

在对等端B端,除了使用指纹A之外,您也会执行相同的操作。现在证书检查器将只检查以确保指纹匹配,而不会执行进一步的检查。在

这种方法确实意味着它将覆盖ALLSSL连接的连接后检查,因此它并不适用于所有用例。如果您可以控制SSL连接对象,您还可以为每个实例调用set_post_connection_check_callback(),这将允许在需要时使用不同的检查器。在

相关问题 更多 >

    热门问题