轉載注明出處: http://www.cnblogs.com/ityoung/p/8296088.html
自動化測試/持續集成/測試開發 QQ交流群: 70160503
服務端生成證書
進入 openssl 目錄
$ cd /usr/lib/ssl
生成私鑰
$ sudo openssl genrsa -des3 -out server.key 1024
生成 CSR 文件
$ sudo openssl req -new -key server.key -out server.csr -config openssl.cnf
其中必填項有:
* Country Name (2 letter code) [AU]:
* Common Name (e.g. server FQDN or YOUR name) []:
生成 CA (用於自簽名)
- 新建demoCA, demoCA/certs, demoCA/newcerts
$ sudo mkdir demoCA demoCA/certs demoCA/newcerts
-
在 demoCAm 目錄下新建空文件 index.txt
-
在 demoCAm 目錄下新建文件 serial, 內容是一個合法的 16 進制數字, 例如 0000
-
返回 /usr/lib/ssl 目錄, 執行如下命令生成 CA
$ sudo openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf
其中必填項有:
* Country Name (2 letter code) [AU]:
* Common Name (e.g. server FQDN or YOUR name) []:
簽名
$ sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
tornado 啟動時加上 SSL 選項
-
復制證書文件到 tornado server 目錄下(可選)
-
修改測試服務器代碼 test.py
import tornado.ioloop
import tornado.web
import os
class TestGetHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, World!")
def make_app():
return tornado.web.Application([
(r"/", TestGetHandler),
])
if __name__ == "__main__":
application = make_app()
http_server = tornado.httpserver.HTTPServer(application, ssl_options={
"certfile": os.path.join(os.path.abspath("."), "server.crt"),
"keyfile": os.path.join(os.path.abspath("."), "server.key"),
})
http_server.listen(443)
tornado.ioloop.IOLoop.instance().start()
- 由於端口號小於1000, 因此需要使用 su 權限的用戶運行腳本
$ sudo python test.py
客戶端訪問
瀏覽器
輸入https://localhost
直接訪問
CURL
添加 -k
選項忽略 SSL 驗證, 如下:
curl -k https://localhost
requests
添加verify=False
選項, 如下:
requests.get(URL, verify=False)
參考
[1] 使用Tornado搭建HTTPS網站, yeolar, http://www.yeolar.com/note/2015/04/30/tornado-ssl-https/
[2] curl - 為什么不能識別自簽名的SSL證書?, https://code.i-harness.com/zh-CN/q/10c8411