2011-11-08 179 views
6

我有提供自簽名證書,我產生這樣的HTTPS連接龍捲風服務器:HTTPS Python客戶端

openssl genrsa -out privatekey.pem 1024           
openssl req -new -key privatekey.pem -out certrequest.csr 
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem 

服務器的代碼如下:

import tornado.ioloop 
import tornado.web 
import tornado.httpserver 
import os 

class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
     print "new client "+str(self) 
     self.write("Hello, world") 

application = tornado.web.Application([ 
    (r"/", MainHandler), 
]) 


http_server = tornado.httpserver.HTTPServer(application, 
              ssl_options={ 
     "certfile": os.path.join("./", "certificate.pem"), 
     "keyfile": os.path.join("./", "privatekey.pem"), 

}) 

if __name__ == "__main__": 
    http_server.listen(443) 
    tornado.ioloop.IOLoop.instance().start() 

我想有一個連接到服務器的python客戶端,並檢查服務器是否是正確的服務器(我猜是通過它的證書)。 目前我做了一個簡單的客戶端是這樣的:

import httplib 
HOSTNAME='localhost' 
conn = httplib.HTTPSConnection(HOSTNAME) 
conn.putrequest('GET','/') 
conn.endheaders() 
response = conn.getresponse() 
print response.read() 

什麼你會建議我做(客戶端將在稍後爲移動應用我只使用Python爲原型)?

謝謝。

+0

如果你能爲我提供一個Java的客戶端也是可以的。 – lc2817

+0

相關http://www.heikkitoivonen.net/blog/2010/08/23/ssl-in-python-2-7/ – jfs

+0

相關:http://stackoverflow.com/questions/1087227/validate-ssl-certificates -with-python – jfs

回答

3

如果您也控制客戶端(例如在android或iphone應用程序中),您可以將自簽名證書添加到您的可信證書存儲區。

它很好地解釋了here for an Android app

+0

謝謝,你能給我更多關於如何在iPhone應用上做到這一點的信息嗎? – lc2817

1

客戶端沒有辦法確保服務器說出真相。您可以爲google.com創建自簽名證書。

+0

假設我可以在證書頒發機構註冊我的證書,那麼我應該怎麼做? – lc2817

+0

@ lc2817:那麼你可以使用[其中一個答案](我之前已經鏈接過了)(http://stackoverflow.com/questions/1087227/validate-ssl-certificates-with-python)。 – jfs

+0

您沒有回答我對其他鏈接的最新評論。 – lc2817