一、SSL是什麼?
Secure Sockets Layer(安全套接層)縮寫SSL,是為Web伺服器與瀏覽器之間的通信加密的一種安全協議。它實現了在Internet環境中,通過了身份認證並與Web伺服器建立起安全通信線路後,進行數據傳輸的過程。在這個過程中, SSL使用公鑰加密技術和對稱加密技術相結合的方式,以保證數據的私密性、完整性和可靠性。
Python3中,提供了ssl的標準庫,支持TLSv1、TLSv1.1、TLSv1.2、TLSv1.3協議。
二、SSL證書和驗證
SSL證書是一份由數字證書頒發機構(CA)簽署的電子文檔,用於標識該站點的身份,提供公鑰和其他額外信息,以用於構建安全連接。使用SSL證書保證數據在傳輸過程中的保密性、完整性、可靠性。
在Python3中,可以使用ssl.create_default_context()創建出默認配置的SSL上下文對象,其中有對證書的驗證機制、加密演算法、協議版本等的設置。可以使用SSL驗證函數如cert_verify_callback來手動進行SSL驗證。
驗證SSL證書的示例代碼如下:
import ssl
from urllib.request import urlopen
# ignore ssl certificate error
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
url = 'https://www.baidu.com'
html = urlopen(url=url, context=ctx).read().decode('utf-8')
print(html)
三、SSL通信加密和解密
SSL協議要求通過使用對稱加密演算法將客戶端和伺服器之間的通信內容進行加密。在Python3中,可以使用ssl.wrap_socket()函數和socket.socket()對象進行封裝和解封裝工作。
封裝通信示例代碼如下:
import socket
import ssl
hostname = 'www.example.com'
context = ssl.create_default_context()
# create a socket object
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect((hostname, 443))
# wrap the socket
with context.wrap_socket(sock, server_hostname=hostname) as secure_sock:
# send data to server
secure_sock.sendall(b'GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n')
# receive data from server
data = secure_sock.recv(1024)
print(data.decode('utf-8'))
解封裝通信示例代碼如下:
import socket
import ssl
hostname = 'www.example.com'
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
# create a socket object
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect((hostname, 443))
# send handshake message
with context.wrap_socket(sock, server_hostname=hostname) as secure_sock:
# receive and print response
secure_sock.sendall(b'GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n')
data = b''
while True:
chunk = secure_sock.recv(1024)
if not chunk:
break
data += chunk
print(data.decode('utf-8'))
四、SSL證書生成
在Python3中,可以使用自帶的ssl模塊或者第三方模塊如pyOpenSSL來生成SSL證書。這裡舉例使用pyOpenSSL。
安裝pyOpenSSL:pip install pyopenssl
生成SSL證書的示例代碼如下:
from OpenSSL import crypto
# create a certificate and private key pair
key = crypto.PKey()
key.generate_key(crypto.TYPE_RSA, 2048)
# create a self-signed certificate
cert = crypto.X509()
cert.get_subject().CN = 'localhost'
cert.set_serial_number(1000)
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(31536000)
cert.set_issuer(cert.get_subject())
cert.set_pubkey(key)
cert.sign(key, 'sha256')
# save the certificate and private key pair
open('test.crt', 'wb').write(
crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
open('test.key', 'wb').write(
crypto.dump_privatekey(crypto.FILETYPE_PEM, key))
五、SSL應用場景
SSL通信協議廣泛應用於現代網路安全傳輸中,如HTTPS(HTTP Secure)、FTP Secure(FTPS)等協議。SSL可以有效防止黑客和中間人劫持,保護數據安全,並滿足企業和用戶對網路數據的隱私、完整性和保密性要求。
六、總結
Python3中的ssl模塊提供了強大的ssl通信加密和解密、SSL證書驗證和生成等功能,方便實用。SSL通信協議在現代網路安全傳輸中廣泛應用,保護數據安全和網路安全。
原創文章,作者:UHEKZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/360944.html
微信掃一掃
支付寶掃一掃