我有一個虛擬機。我生成了 SSL 證書:
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
之后使用帶有引數 ssl_context 的 Flask 撰寫了一個 Web 服務器:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def index():
return "Flask is running!"
@app.route("/data")
def some_func():
pass
if __name__ == "__main__":
app.run(ssl_context=("cert.pem", "key.pem"))
現在我在同一個網路中有另一個虛擬機,我有一個請求一些資料的客戶端應用程式:
import requests
import json
SERVER_URL = 'https://example.com/data'
token = "some_token"
def _send():
query = """some_query"""
data = {'query': query}
headers = {'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': "Bearer %s" % token
}
response = requests.post(SERVER_URL,
data=json.dumps(data).encode('utf-8'),
headers=headers,
verify=Flase)
if response.status_code == 200:
res = json.loads(response.text)
return True, res, None
return False, None, response.text
print(_send())
我現在需要的是傳遞給verify一些證書的引數路徑,這將幫助我檢查服務器的 SSL 證書。但是我需要通過哪些檔案來驗證?同樣cert.pem,key.pem我生成并傳遞給 Flask 應用程式,ssl_contextor或者我需要生成另一個檔案(如果是,我如何生成/創建該檔案)?
uj5u.com熱心網友回復:
我稍微修改了您的示例:
CommonName用and生成證書SubjectAltName(在這個例子中我使用了domain.test):
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365 -subj /CN=domain.test -addext "subjectAltName = DNS:domain.test"
- 運行服務器部分的代碼:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def index():
return "Flask is running!"
@app.route("/data", methods=["GET", "POST"]) # <-- add methods= here
def some_func():
return jsonify({"result": "Hello World!"}) # <-- return some example data
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, ssl_context=("cert.pem", "key.pem"))
- 客戶端部分:
import requests
import json
SERVER_URL = "https://domain.test:5000/data" # <-- put domain.test here
token = "some_token"
def _send():
query = """some_query"""
data = {"query": query}
headers = {
"Accept": "application/json",
"Content-Type": "application/json",
"Authorization": "Bearer %s" % token,
}
response = requests.post(
SERVER_URL,
data=json.dumps(data).encode("utf-8"),
headers=headers,
verify="cert.pem", # <-- put cert.pem here
)
if response.status_code == 200:
res = json.loads(response.text)
return True, res, None
return False, None, response.text
print(_send())
輸出沒有任何警告:
(True, {'result': 'Hello World!'}, None)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/445817.html
