python爬虫 requests访问http网站之443报错(ssl验证)

发布时间 2023-05-30 12:05:40作者: 各加

报错信息:

urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='ssr4.scrape.center', port=443): Max retries exceeded with url: /page/1 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1007)')))

SSL介绍:

  • SSL(Secure Sockets Layer)验证是在建立HTTPS连接时进行的一种验证过程。SSL验证的目的是确保服务器的身份,并验证通信双方之间的信任关系。以下是SSL验证的基本过程:

  • 客户端请求建立SSL连接:当客户端(通常是Web浏览器)向服务器发送HTTPS连接请求时,它将尝试与服务器建立SSL连接。

  • 服务器发送数字证书:如果服务器支持SSL,它会将包含数字证书的响应发送给客户端。数字证书由经过可信认证的第三方机构(证书颁发机构)签发,并包含了服务器的公钥、服务器的身份信息以及其他相关信息。

  • 客户端验证数字证书:客户端接收到服务器发送的数字证书后,会对证书进行验证。验证过程包括以下几个方面:

    • a. 校验证书的签发机构:客户端会检查证书是否由被客户端信任的可信证书颁发机构签发。

    • b. 检查证书的有效期:客户端会验证证书是否在有效期内,即确认证书尚未过期。

    • c. 验证服务器域名:客户端会核对证书中的服务器域名与客户端请求的域名是否匹配。这可以防止中间人攻击等安全威胁。

    • d. 检查证书的撤销状态:客户端会查询证书撤销列表(CRL)或在线证书状态协议(OCSP)服务器,确认证书是否被吊销。

  • 客户端生成会话密钥:一旦客户端验证通过,它会生成一个临时的会话密钥(也称为"对称密钥"或"会话密钥"),用于该SSL会话的后续加密和解密操作。

  • 安全数据传输:客户端使用服务器的公钥对会话密钥进行加密,并将加密后的会话密钥发送给服务器。服务器使用自己的私钥解密接收到的会话密钥。之后,客户端和服务器之间的通信将使用该会话密钥进行对称加密和解密。

  • 通过SSL验证过程,客户端可以验证服务器的身份,并确保与服务器之间建立了安全的通信通道。这种验证过程可以帮助防止中间人攻击、欺骗和数据篡改等安全威胁。同时,SSL验证还为用户提供了信任和可靠性,因为证书是由可信的第三方机构签发的,代表了服务器的身份和认证信息。
    使用requests.get(verify=False) 关闭ssl验证。
    urllib3.disable_warnings()禁用 urllib3 库中的 SSL 证书验证警告