Я разрабатываю модуль, который будет отправлять данные через https на наш сервер с использованием Python.Но до этого я вобрал в себя всю эту концепцию и потренировался в некоторых вещах, чтобы узнать больше.
Однако, делая некоторый код, я путаюсь с поведением функции и чувствую, что в моем методе что-то серьезно не так.
Моя цель состоит в том, чтобы код модуля проверял или использовал сертификат Yahoo для связи, однако, похоже, что никакого эффекта нет.
Вот мой код
import platform
import socket
import psutil
import json
import http.client
import ssl
server_cert = '/home/punshi/Downloads/yahoo'
server_key = '/home/punshi/Downloads/yahoo_pub.key'
client_cert = '/home/punshi/client_cert/client.crt'
client_key = '/home/punshi/client_cert/client.key'
ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
#ctx.verify_mode = ssl.CERT_REQUIRED
#ctx.load_cert_chain(certfile=client_cert, keyfile=client_key)
ctx.load_verify_locations(cafile=server_cert)
conn = http.client.HTTPSConnection(host="in.yahoo.com", port=443, context=ctx)
# key_file=client_key, cert_file=server_cert)
headers = {'Content-type': 'application/json'}
json_data = json.dumps(None)
conn.request('POST', '/post', json_data, headers)
response = conn.getresponse()
print(response.read().decode())
conn.close()
-> В приведенном выше коде я скачал сертификат Yahoo, используя Chrome.
-> Я сгенерировал открытый ключ Yahoo, используя
openssl s_client -connect the.host.name:443 | openssl x509 -pubkey -noout
Так что в приведенном выше коде независимо отзначения server_cert , я всегда получаю основную информацию, это означает, что он не проверяет сертификат.
Так, какова точная цель load_verify_location (), если он не проверяет сертификат?
Я всегда вижу этот вывод -
<html>
<meta charset='utf-8'>
<script>
window.location.replace("https://in.yahoo.com?err=404&err_url=https%3A%2F%2Fin.yahoo.com%2Fpost");
</script>
<noscript>
<META http-equiv="refresh" content="0;URL='https://in.yahoo.com?err=404&err_url=https%3A%2F%2Fin.yahoo.com%2Fpost'">
</noscript>
</html>
<!-- Add this extra comment line to make response size greater than 512 bytes in order to make Internet Explorer happy -->
Process finished with exit code 0
Подробнее
ОС Linux, Ubuntu 16 Python 3.7.2