首先要生成伺服器端的私密金鑰(key檔):
sudo openssl genrsa -des3 -out server.key 1024
- 運行時會提示輸入密碼,此密碼用於加密key檔(參數des3便是指加密演算法,當然也可以選用其他你認為安全的演算法.),以後每當需讀取此檔(通過openssl提供的命令或API)都需輸入口令.如果覺得不方便,也可以去除這個口令,但一定要採取其他的保護措施!
去除key文件口令的命令:
生成CSR檔:
sudo openssl req -new -key server.key -out server.csr -config /etc/pki/tls/openssl.cnf
- 生成Certificate Signing Request(CSR),生成的csr檔交給CA簽名後形成服務端自己的證書.螢幕上將有提示,依照其指示一步一步輸入要求的個人資訊即可.
對用戶端也作同樣的命令生成key及csr文件:
CSR檔必須有CA的簽名才可形成證書.可將此檔發送到verisign等地方由它驗證,要交一大筆錢,何不自己做CA呢.
- 在/etc/pki/CA/目錄下新建目錄certs、newcerts
- 建立一個空檔 index.txt
- 建立一個文字檔 serial, 沒有副檔名,內容是一個合法的16進制數字,例如 0000
sudo openssl req -new -x509 -keyout ca.key -out ca.crt -config /etc/pki/tls/openssl.cnf
sudo openssl genrsa -des3 -out client.key 1024
sudo openssl req -new -key client.key -out client.csr -config openssl.cnf
用生成的CA的證書為剛才生成的server.csr,client.csr文件簽名:
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config /etc/pki/tls/openssl.cnf
sudo openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config /etc/pki/tls/openssl.cnf
到了這裡應該已經創建了可以使用的證書了,如果在為檔簽名的時候有錯誤,那多半是資訊不正確,這時可以去清空一下 index.txt 裡的資訊,然後重新執行第5步裡失敗的操作。
在Tornado啟用https server
http_server = HTTPServer( app, max_body_size=1500 * 1024 * 1024 * 1024,
ssl_options={"certfile": os.path.join( os.path.abspath( "." ), "server.crt" ),
"keyfile": os.path.join( os.path.abspath( "." ), "server.key" )} )