在制作OpenSSL密钥时要为commonName添加什么?

时间:2010-01-27 20:34:33

标签: python ssl m2crypto

我有一个应用程序应用程序框架,它在网络上的未命名主机之间以对等方式工作。我想要对流量进行加密,所以我已经使用M2Crypto实现了一个设置,但我遇到了麻烦。我不知道在创建证书时应该为'commonName'放下什么。它似乎想要一个域名,但运行它的计算机都没有。我只是将'temphost'用于commonName,但显然这是一个重要的参数。我在尝试测试时得到了这个:

  

M2Crypto.SSL.Checker.WrongHost:同行   证书commonName不匹配   主机,预计127.0.0.1,得到了temphost

有没有办法概括commonName?

2 个答案:

答案 0 :(得分:1)

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

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

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

在对等方B方面,除了使用指纹A外,您也会这样做。现在,证书检查程序只会检查以确保指纹匹配,并且不会进行进一步检查。

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

答案 1 :(得分:1)

因此根据您对我的第一个答案的评论,我决定提供另一种可能适合您案例的解决方案。创建自己的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.Connection对象的创建,并使用合适的检查器调用它们的set_post_connection_check_callback()。

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

如果您能想到可以在帖子连接检查中验证的任何额外信息,您可以将该信息放入证书(可能在commonName中)并编写您自己的检查器(而不是上面的无)。