热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonssl双向认证_flas的双向ssl认证

免责声明在我开始之前,我会注意到“伊曼纽尔伊”的评论。如果首先在生产服务器或开发服务器上执行此操作,则需要考虑。例如,如果您使用的是Apa

免责声明

在我开始之前,我会注意到“伊曼纽尔·伊”的评论。如果首先在生产服务器或开发服务器上执行此操作,则需要考虑。例如,如果您使用的是Apache WebServer,那么可以从Apache完成HTTPS组件。唯一不同的做法是将证书详细信息作为选项传递给服务器应用程序,然后验证应用程序本身的序列号。

这是可能的

但这种方法被认为是不好的编程实践。不幸的是,它不能从flask.request访问,并且不能与烧瓶包一起使用。但是,Flask使用Werkzeug,可以通过修补werkzeug.serving包来编写主Flask代码。不建议这样做,因为您可能希望以后更新Flask或Werkzeug,并且您的修补程序可能会损坏,需要重新考虑。i、 从0.9到1.0。

这提供了一个不使用web服务器的解决方案。但我建议使用web服务器/环境变量组合。这是比较清洁和良好的做法。

我做了一些测试,看看这是否容易实现。我可以用最新开发的代码库“Werkzeug-0.10_devdevdev_20141223-py2.7”来确认这种方法是可行的。

您可能需要验证在每个证书中找到的序列号(种子号)(甚至一些其他变量)。如您所知,序列号对于每个证书都是唯一的,并且在服务器端的证书生成过程中由您确定。它有助于将此信息与客户端记录和证书信息(如果适用)一起存储,以便稍后验证客户端证书序列号。注意:它可能需要在十六进制和十进制10进制之间进行转换。

Werkzeug开发2014122

我做的是在werkzeug.serving.BaseWSGIServer.__init__调用wrap_socket()中添加以下选项。

使用这些;

server_side=True, ca_certs= '/etc/apache2/ssl/ca.pem', cert_reqs=ssl.CERT_REQUIREDca_certs:使用此项进行验证,这是用于生成客户端证书的ca cert)

需要ssl.CERT_:需要对ca_证书进行客户端证书验证

注意:如果客户端证书未通过初始验证,您将无法获取客户端证书。不会的。

然后在我的烧瓶测试类中我修补了verify_request

其中def verify_request(self, request, client_address):

cert = request.getpeercert(True)

raw = decoder.decode(cert)[0]

print "Serial Number of your certificate is: % " % str(raw[0][1])

# todo: do checks & if serial no is ok then return true

return True

werkzeug.serving.BaseWSGIServer.verify_request = verify_request

这证明了这是可能的,但您可能需要调查BaseWSGIServer继承的HTTPServer类的请求处理程序,以找到更好的方法来执行回调或重写。

Werkzeug 0.9.X

如果您使用的是Werkzeug 0.9.X,我假设您使用的是导入from OpenSSL import SSL。请参阅代码段here。我没有测试过这个。

你可能对这个版本感兴趣的一些电话是;

-Context.set_verify(mode, callback)

-Connection.get_peer_certificate()

澄清

我不明白的是,你提到在第一次握手时发送CSR。如果这是生成客户机证书的过程,则可能需要重新考虑在系统和环境的上下文中如何执行此操作。如果我能得到更多的信息,我可以进一步评论。。

另外,SSL/TLS上下文中的“握手”通常指的是首先使用现有证书创建安全连接的操作。握手之后,不严格地说,就建立了一个连接。



推荐阅读
author-avatar
手机用户2502870065
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有