热门标签 | 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上下文中的“握手”通常指的是首先使用现有证书创建安全连接的操作。握手之后,不严格地说,就建立了一个连接。



推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 标题: ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
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社区 版权所有