zoukankan      html  css  js  c++  java
  • ssl 双向认证

    ssl 双向认证

    client side

      1 # coding:utf-8
      2 
      3 import socket, ssl, pprint
      4 import os,time
      5 
      6 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      7 
      8 ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
      9 ssl_ctx.load_cert_chain("keys/client.pem","keys/client.key")
     10 ssl_ctx.load_verify_locations("ca.crt")
     11 #ssl_ctx.verify_mode = ssl.CERT_REQUIRED
     12 
     13 ssl_sock = ssl_ctx.wrap_socket(s)
     14 
     15 ssl_sock.connect(('localhost'6030))
     16 
     17 print repr(ssl_sock.getpeername())
     18 print ssl_sock.cipher()
     19 
     20 print pprint.pformat(ssl_sock.getpeercert())
     21 
     22 ssl_sock.write("boo!")
     23 time.sleep(2)
     24 ssl_sock.write("bye!")

    server side

      1 # coding:utf-8
      2 from __future__ import absolute_import, division, print_function, with_statement
      3 import socket, ssl
      4 import os
      5 import tornado.tcpserver
      6 from tornado.ioloop import IOLoop
      7 import tornado.gen
      8 
      9 ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
     10 
     11 ssl_ctx.load_cert_chain("./keys/client.pem",
     12                         "./keys/client.key")
     13 
     14 ssl_ctx.load_verify_locations("keys/ca.crt")
     15 
     16 ssl_ctx.verify_mode = ssl.CERT_REQUIRED
     17 
     18 
     19 class A(tornado.tcpserver.TCPServer):
     20     def handle_stream(self, stream, address):
     21         print('recv connection from ' ,address)
     22         self.run(stream,address)
     23 
     24     @tornado.gen.coroutine
     25     def run(self, stream, address):
     26         while True:
     27           try:
     28             body =  yield stream.read_bytes(1024, partial=True)
     29           except:
     30             print('close connection from ' ,address)
     31             return
     32           print(body)
     33 
     34 def main():
     35     server = A(ssl_options=ssl_ctx)
     36     server.listen(6030'')
     37 
     38 
     39 io_loop = IOLoop.current()
     40 
     41 io_loop.add_callback(main)
     42 io_loop.start()
  • 相关阅读:
    [转][html5]网页横屏
    [转][EasyUI]扩展 DateBox
    [转][C#]枚举的遍历Enum
    [转][C#]单例模式之懒加载
    [C#][Quartz]添加监听器
    [C#][Quartz]帮助类
    [转]Win 10 的 Win 按键没反应
    转来的--轻松自动化---selenium-webdriver(python) (七)---定位iframe——转来的
    安装charles
    遇到的问题汇总
  • 原文地址:https://www.cnblogs.com/sixloop/p/9485742.html
Copyright © 2011-2022 走看看