這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Mac OS 平台使用 Python 和 Docker 建立測試用 Https Server
Flask 是我很喜歡的 Python Web Framework,最近需要測試 Https 通訊,需要建立一個使用自我簽署憑證的 Https Server,那麼用 Flask 可以這樣通過下面的步驟非常方便地實現。
自我簽署憑證
使用 OpenSSL
產生 .key
私密金鑰檔案和 .csr
Certificate Signing Request 檔案:
openssl req -new -key test.key -out test.csr
產生 10 年期的自我簽署憑證檔案:
openssl x509 -req -days 3650 -in test.csr -signkey test.key -out test.crt
更多可以參考 HTTPS 憑證鏈結以及 Android 應用中的 HTTPS 實現問題。
Flask 工程
Python 的開發環境搭建就不提了,命令列就行,很簡單,安裝 Flask 也就一行命令:
pip install flask
然後,建立一個 Python 源碼檔案,內容如下:
from OpenSSL import SSLfrom flask import Flaskfrom flask import render_templateapp = Flask(__name__)context = SSL.Context(SSL.SSLv23_METHOD)context.use_privatekey_file('/Users/rwang/testssl/test.key')context.use_certificate_file('/Users/rwang/testssl/test.crt')@app.route("/")def hello():return render_template("index.html")if __name__ == "__main__": app.run(host='127.0.0.1',port=8443, debug = True, ssl_context=context)
可以看到在 Https 測試網站配置了剛才產生的自我簽署憑證,而且,使用了 Flask 的 template
來響應一個 index.html
檔案中的內容。這需要在上面 Python 源碼檔案同級目錄下建立 templates
目錄,並建立 index.html
檔案,裡面的內容和測試目的有關,比如跳轉 Http 網站的:
<html> <head> <title>Redirect</title> <script>window.location.href='http://www.baidu.com';</script> </head> <body> <h1>Hello, Stranger!</h1> </body></html>
到這裡,可以在命令列中執行以下上面的 Python 源碼,在瀏覽器中訪問 https://127.0.0.1:8443
來檢查 Https 網站是否正常工作:
python pyhttpsserver.py
如果正常跳轉到百度首頁就說明網站工作正常。
Docker
現在,除了 Boot2Docker,Docker 官方提供了 Mac OS 平台上安裝 Docker 的檔案,下載後按照提示安裝好就行。
安裝後,參考上面的官方文檔建立一個 VirtualBox並啟動就可以進行 Docker 的日常管理了。這裡在存放上面 pyhttpsserver.py
檔案和 templates
目錄的檔案夾中,建立一個 Dockerfile
檔案,內容為:
FROM python:2.7.10RUN pip install FlaskADD . /codeWORKDIR /codeCMD python pyhttpsserver.py
要使用上面的 Dockerfile
build 出一個 Docker 鏡像,需要先 pull 下來 python:2.7.10
基礎鏡像:
docker pull python:2.7.10
然後在 shell
中 cd
到包含 Dockerfile
的目錄下,運行下面的命令 build 一個包含這個 Https Server 的鏡像:
docker build -t httpsserver .
注意最後面的 .
不能少。
有了 httpsserver
image,就可以在後台運行這個 Https Server 的 Container
了:
docker run -d httpsserver
好了,我們有了一個隨時可用的 Https 測試伺服器了,如果想用做其他用途,修改 Flask 工程重新編譯不同的 Docker image 就好了,嫌麻煩也可以將包含 Flask 工程的目錄通過 Volumn 在運行 Docker 容器時掛載到容器中再執行,具體可以參考 理解 Docker 中的 Volumes。
-- EOF --
- HTTPS 憑證鏈結以及 Android 應用中的 HTTPS 實現問題→
- ← BLE and BLE on Android
聲明: 本文採用 BY-NC-SA 協議進行授權. 轉載請註明轉自: Mac OS 平台使用 Python 和 Docker 建立測試用 Https Server