Changes between Version 10 and Version 11 of TLSLiteの短いソースコード集


Ignore:
Timestamp:
09/08/06 07:07:35 (13 years ago)
Author:
nakiki
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TLSLiteの短いソースコード集

    v10 v11  
    7272 * 16バイトブロックであることに注意 
    7373 * 安全性を保障するには共有鍵は秘密にする必要がある。 
    74 == TLSサーバ(証明書) == 
    75 {{{ 
    76 #!python 
    77 # -*- coding: utf-8 -*- 
    78 #!/usr/bin/python 
    79  
    80 import socket 
    81 import SocketServer as ss 
    82 import tlslite.api as tls 
    83  
    84 # 証明書を使った場合の例 
    85 class Handler(ss.StreamRequestHandler): 
    86   def setup(self): 
    87     self.connection = tls.TLSConnection(self.request) 
    88     self.connection.closeSocket = True 
    89     s = open("./serverX509Cert.pem").read() 
    90     x509 = tls.X509() 
    91     x509.parse(s) 
    92     certChain = tls.X509CertChain([x509]) 
    93     s = open("./serverX509Key.pem").read() 
    94     privateKey = tls.parsePEMKey(s, private=True) 
    95  
    96     settings = tls.HandshakeSettings() 
    97     settings.cipherNames = ["aes128"] 
    98     # 提示されるクライアントの証明書のfingerprint 
    99     checker = tls.Checker(x509Fingerprint= 'cbfef53d18298d7a432720a39232f0ce22e9 
    100 a30a') 
    101     self.connection.handshakeServer(certChain=certChain, 
    102       privateKey =privateKey, checker = checker, reqCert = True, 
    103       settings = settings) 
    104     self.rfile = self.connection.makefile('rb', self.rbufsize) 
    105     self.wfile = self.connection.makefile('wb', self.wbufsize) 
    106  
    107   def handle(self): 
    108     print 'handle' 
    109     while 1: 
    110       line = self.rfile.readline() 
    111       if len(line) == 0: 
    112         return 
    113       self.wfile.write(line) 
    114  
    115 class Server(ss.ThreadingTCPServer): 
    116   allow_reuse_address = 1 
    117   daemon_threads = 1 
    118  
    119 server = Server(('localhost', 3746), Handler) 
    120 print 'listening:', server.socket.getsockname() 
    121 server.serve_forever() 
    122 }}} 
    123  * 証明書はTLSLiteのサンプルにあるものです。 
    124  
    125 == TLSクライアント(証明書) == 
    126 {{{ 
    127 #!python 
    128 # -*- coding: utf-8 -*- 
    129 #!/usr/bin/python 
    130  
    131 import socket 
    132 import tlslite.api as tls 
    133 import sys 
    134  
    135 DST = ('localhost', 3746) 
    136  
    137 # 証明書を使った場合の例 
    138 def connect(sockaddr): 
    139   sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    140   sock.connect(sockaddr) 
    141   sock.settimeout(10) 
    142   conn = tls.TLSConnection(sock) 
    143   conn.closeSocket = True 
    144   s = open("./clientX509Cert.pem").read() 
    145   x509 = tls.X509() 
    146   x509.parse(s) 
    147   print "fingerprint=", x509.getFingerprint() 
    148   certChain = tls.X509CertChain([x509]) 
    149   s = open("./clientX509Key.pem").read() 
    150   privateKey = tls.parsePEMKey(s, private=True) 
    151   # 提示されるサーバの証明書のfingerprint 
    152   checker = tls.Checker(x509Fingerprint= '8b8a01e15a2095da731a9b864a30ae272d0381 
    153 80') 
    154   conn.handshakeClientCert(certChain = certChain, privateKey = privateKey, 
    155     checker = checker) 
    156   return conn 
    157  
    158 conn = connect(DST) 
    159 rfile = conn.makefile('rb') 
    160 while 1: 
    161   print '> ', 
    162   line = sys.stdin.readline() 
    163   if len(line) == 0: 
    164     conn.close() 
    165     print 
    166     break 
    167   conn.write(line) 
    168   line = rfile.readline() 
    169   if len(line) == 0: 
    170     conn.close() 
    171     print 'EOF' 
    172     break 
    173   sys.stdout.write(line) 
    174 }}} 
    175 == TLSサーバ(共有鍵) == 
    176 {{{ 
    177 #!python 
    178 # -*- coding: utf-8 -*- 
    179 #!/usr/bin/python 
    180  
    181 import socket 
    182 import SocketServer as ss 
    183 import tlslite.api as tls 
    184  
    185 sharedKeyDB = tls.SharedKeyDB() 
    186 sharedKeyDB.create() 
    187 sharedKeyDB['nakiki'] = 'nakikinakiki' 
    188  
    189 # 共有鍵を使った例 
    190 class Handler(ss.StreamRequestHandler): 
    191   def setup(self): 
    192     self.connection = tls.TLSConnection(self.request) 
    193     self.connection.closeSocket = True 
    194     settings = tls.HandshakeSettings() 
    195     settings.cipherNames = ["aes128"] 
    196     self.connection.handshakeServer(sharedKeyDB = sharedKeyDB, 
    197       settings = settings) 
    198     self.rfile = self.connection.makefile('rb', self.rbufsize) 
    199     self.wfile = self.connection.makefile('wb', self.wbufsize) 
    200  
    201   def handle(self): 
    202     print 'handle' 
    203     while 1: 
    204       line = self.rfile.readline() 
    205       if len(line) == 0: 
    206         return 
    207       self.wfile.write(line) 
    208  
    209 class Server(ss.ThreadingTCPServer): 
    210   allow_reuse_address = 1 
    211   daemon_threads = 1 
    212  
    213 server = Server(('localhost', 3747), Handler) 
    214 print 'listening:', server.socket.getsockname() 
    215 server.serve_forever() 
    216 }}} 
    217 == TLSクライアント(共有鍵) == 
    218 {{{ 
    219 #!python 
    220 # -*- coding: utf-8 -*- 
    221 #!/usr/bin/python 
    222  
    223 import socket 
    224 import tlslite.api as tls 
    225 import sys 
    226  
    227 DST = ('localhost', 3747) 
    228  
    229 # 証明書を使った場合の例 
    230 def connect(sockaddr): 
    231   sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    232   sock.connect(sockaddr) 
    233   sock.settimeout(10) 
    234   conn = tls.TLSConnection(sock) 
    235   conn.closeSocket = True 
    236   conn.handshakeClientSharedKey(username = 'nakiki', sharedKey = 'nakikinakiki') 
    237   return conn 
    238  
    239 conn = connect(DST) 
    240 rfile = conn.makefile('rb') 
    241 while 1: 
    242   print '> ', 
    243   line = sys.stdin.readline() 
    244   if len(line) == 0: 
    245     conn.close() 
    246     print 
    247     break 
    248   conn.write(line) 
    249   line = rfile.readline() 
    250   if len(line) == 0: 
    251     conn.close() 
    252     print 'EOF' 
    253     break 
    254   sys.stdout.write(line) 
    255 }}}