உலகளாவிய உருவாக்குநர்களுக்கான பைத்தானைப் பயன்படுத்தி பொது விசை உள்கட்டமைப்பு (PKI) மற்றும் சான்றிதழ் சரிபார்ப்புக்கான விரிவான வழிகாட்டி.
சான்றிதழ் சரிபார்ப்பில் தேர்ச்சி பெறுதல்: பைத்தானில் PKI செயல்படுத்தல்
இன்றைய ஒன்றோடொன்று இணைக்கப்பட்ட டிஜிட்டல் நிலப்பரப்பில், நம்பிக்கையை நிறுவுவதும், தகவல்தொடர்புகளின் நம்பகத்தன்மையை உறுதி செய்வதும் மிக முக்கியமானது. பொது விசை உள்கட்டமைப்பு (PKI) மற்றும் டிஜிட்டல் சான்றிதழ்களின் சரிபார்ப்பு ஆகியவை இந்த நம்பிக்கையின் அடிப்படையை உருவாக்குகின்றன. இந்த விரிவான வழிகாட்டி PKI இன் நுணுக்கங்களை ஆராய்கிறது, குறிப்பாக பைத்தானைப் பயன்படுத்தி வலுவான சான்றிதழ் சரிபார்ப்பு வழிமுறைகளை எவ்வாறு செயல்படுத்துவது என்பதில் கவனம் செலுத்துகிறது. அடிப்படை கருத்துக்களை நாங்கள் ஆராய்வோம், நடைமுறை பைத்தான் குறியீடு எடுத்துக்காட்டுகளில் மூழ்கி, நிறுவனங்களை நம்பிக்கையுடன் அங்கீகரிக்கவும், முக்கியமான தரவைப் பாதுகாக்கவும் கூடிய பாதுகாப்பான பயன்பாடுகளை உருவாக்குவதற்கான சிறந்த நடைமுறைகளை விவாதிப்போம்.
PKI இன் தூண்களைப் புரிந்துகொள்வது
பைத்தான் செயலாக்கங்களை நாங்கள் தொடங்குவதற்கு முன், PKI பற்றிய உறுதியான புரிதல் அவசியம். டிஜிட்டல் சான்றிதழ்களை உருவாக்க, நிர்வகிக்க, விநியோகிக்க, பயன்படுத்த, சேமித்து வைக்க மற்றும் ரத்து செய்ய தேவையான வன்பொருள், மென்பொருள், கொள்கைகள், செயல்முறைகள் மற்றும் நடைமுறைகளின் அமைப்பு PKI ஆகும், மேலும் பொது விசை குறியாக்கத்தை நிர்வகிக்கவும் இது பயன்படுகிறது. இணையவழி வர்த்தகம், இணைய வங்கி மற்றும் ரகசிய மின்னஞ்சல் தொடர்பு போன்ற செயல்பாடுகளுக்கு பாதுகாப்பான மின்னணு தகவல் பரிமாற்றத்தை எளிதாக்குவதே இதன் முக்கிய குறிக்கோள் ஆகும்.
PKI இன் முக்கிய கூறுகள்:
- டிஜிட்டல் சான்றிதழ்கள்: இவை ஒரு பொது விசையை ஒரு நிறுவனத்துடன் (எ.கா., ஒரு தனிநபர், அமைப்பு அல்லது சர்வர்) பிணைக்கும் மின்னணு சான்றுகள். அவை பொதுவாக நம்பகமான சான்றிதழ் ஆணையத்தால் (CA) வழங்கப்படுகின்றன, மேலும் X.509 தரத்தைப் பின்பற்றுகின்றன.
- சான்றிதழ் ஆணையம் (CA): டிஜிட்டல் சான்றிதழ்களை வழங்குதல், கையொப்பமிடுதல் மற்றும் ரத்து செய்தல் ஆகியவற்றிற்குப் பொறுப்பான நம்பகமான மூன்றாம் தரப்பினர். CAகள் ஒரு PKI இல் நம்பிக்கையின் மூலமாக செயல்படுகின்றன.
- பதிவு ஆணையம் (RA): ஒரு CA சார்பாக சான்றிதழ்களைக் கோரும் பயனர்கள் மற்றும் சாதனங்களின் அடையாளத்தை சரிபார்க்கும் ஒரு நிறுவனம்.
- சான்றிதழ் ரத்து பட்டியல் (CRL): திட்டமிடப்பட்ட காலாவதி தேதிக்கு முன்பு CA ஆல் ரத்து செய்யப்பட்ட சான்றிதழ்களின் பட்டியல்.
- ஆன்லைன் சான்றிதழ் நிலை நெறிமுறை (OCSP): CRLகளுக்கு மிகவும் திறமையான மாற்றாகும், இது ஒரு சான்றிதழின் நிலையை நிகழ்நேரத்தில் சரிபார்க்க அனுமதிக்கிறது.
- பொது விசை கிரிப்டோகிராபி: ஒவ்வொரு நிறுவனமும் ஒரு ஜோடி விசைகளைக் கொண்டிருக்கும் அடிப்படை கிரிப்டோகிராஃபிக் கொள்கை: ஒரு பொது விசை (பரவலாகப் பகிரப்பட்டது) மற்றும் ஒரு தனிப்பட்ட விசை (ரகசியமாக வைக்கப்பட்டது).
சான்றிதழ் சரிபார்ப்பின் முக்கியமான பங்கு
சான்றிதழ் சரிபார்ப்பு என்பது ஒரு கிளையன்ட் அல்லது சர்வர் மற்றொரு தரப்பினரால் வழங்கப்பட்ட டிஜிட்டல் சான்றிதழின் நம்பகத்தன்மையையும் நம்பகத்தன்மையையும் சரிபார்க்கும் செயல்முறையாகும். இந்த செயல்முறை பல காரணங்களுக்காக முக்கியமானது:
- அங்கீகாரம்: இது நீங்கள் தொடர்பு கொள்ளும் சர்வர் அல்லது கிளையண்டின் அடையாளத்தை உறுதிப்படுத்துகிறது, ஆள்மாறாட்டம் மற்றும் மனிதன்-நடுவில் தாக்குதல்களைத் தடுக்கிறது.
- ஒருமைப்பாடு: பரிமாறப்படும் தரவு பரிமாற்றத்தின்போது சேதப்படுத்தப்படவில்லை என்பதை இது உறுதி செய்கிறது.
- ரகசியத்தன்மை: இது பாதுகாப்பான, மறைகுறியாக்கப்பட்ட தகவல்தொடர்பு சேனல்களை (TLS/SSL போன்றவை) நிறுவ உதவுகிறது.
ஒரு பொதுவான சான்றிதழ் சரிபார்ப்பு செயல்முறை ஒரு சான்றிதழின் பல அம்சங்களைச் சரிபார்ப்பதை உள்ளடக்குகிறது, அவற்றுள்:
- கையொப்ப சரிபார்ப்பு: சான்றிதழ் நம்பகமான CA ஆல் கையொப்பமிடப்பட்டதா என்பதை உறுதி செய்தல்.
- காலாவதி தேதி: சான்றிதழ் காலாவதியாகவில்லை என்பதை உறுதிப்படுத்துதல்.
- ரத்து நிலை: சான்றிதழ் ரத்து செய்யப்பட்டதா என்பதைச் சரிபார்த்தல் (CRLகள் அல்லது OCSP ஐப் பயன்படுத்தி).
- பெயர் பொருத்தம்: சான்றிதழின் பொருள் பெயர் (எ.கா., ஒரு வலை சர்வர்க்கான டொமைன் பெயர்) தொடர்பு கொள்ளப்படும் நிறுவனத்தின் பெயருடன் பொருந்துகிறதா என்பதைச் சரிபார்த்தல்.
- சான்றிதழ் சங்கிலி: சான்றிதழ் ஒரு ரூட் CA க்குத் திரும்பும் சரியான நம்பிக்கை சங்கிலியின் ஒரு பகுதியாக இருப்பதை உறுதி செய்தல்.
பைத்தானில் PKI மற்றும் சான்றிதழ் சரிபார்ப்பு
பைத்தான், அதன் வளமான நூலகங்களின் சுற்றுச்சூழல் அமைப்புடன், சான்றிதழ்களுடன் வேலை செய்வதற்கும் PKI செயல்பாடுகளை செயல்படுத்துவதற்கும் சக்திவாய்ந்த கருவிகளை வழங்குகிறது. `cryptography` நூலகம் பைத்தானில் கிரிப்டோகிராஃபிக் செயல்பாடுகளுக்கான ஒரு மூலக்கல்லாகும், மேலும் இது X.509 சான்றிதழ்களுக்கு விரிவான ஆதரவை வழங்குகிறது.
தொடங்குதல்: `cryptography` நூலகம்
முதலில், நூலகம் நிறுவப்பட்டுள்ளதா என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்:
pip install cryptography
cryptography.x509 தொகுதி X.509 சான்றிதழ்களைக் கையாள்வதற்கான உங்கள் முதன்மை இடைமுகம் ஆகும்.
சான்றிதழ்களை ஏற்றவும் மற்றும் ஆய்வு செய்யவும்
நீங்கள் சான்றிதழ்களை கோப்புகளிலிருந்து (PEM அல்லது DER வடிவம்) அல்லது நேரடியாக பைட்டுகளிலிருந்து ஏற்றலாம். ஒரு சான்றிதழை எவ்வாறு ஏற்றுவது மற்றும் ஆய்வு செய்வது என்பதைப் பார்ப்போம்:
from cryptography import x509
from cryptography.hazmat.backends import default_backend
def load_and_inspect_certificate(cert_path):
"""Loads an X.509 certificate from a file and prints its details."""
try:
with open(cert_path, "rb") as f:
cert_data = f.read()
certificate = x509.load_pem_x509_certificate(cert_data, default_backend())
# Or for DER format:
# certificate = x509.load_der_x509_certificate(cert_data, default_backend())
print(f"Certificate Subject: {certificate.subject}")
print(f"Certificate Issuer: {certificate.issuer}")
print(f"Not Before: {certificate.not_valid_before}")
print(f"Not After: {certificate.not_valid_after}")
print(f"Serial Number: {certificate.serial_number}")
# Accessing extensions, e.g., Subject Alternative Names (SAN)
try:
san_extension = certificate.extensions.get_extension_for_class(x509.SubjectAlternativeName)
print(f"Subject Alternative Names: {san_extension.value.get_values_for_type(x509.DNSName)}")
except x509.ExtensionNotFound:
print("Subject Alternative Name extension not found.")
return certificate
except FileNotFoundError:
print(f"Error: Certificate file not found at {cert_path}")
return None
except Exception as e:
print(f"An error occurred: {e}")
return None
# Example usage (replace 'path/to/your/certificate.pem' with an actual path)
# my_certificate = load_and_inspect_certificate('path/to/your/certificate.pem')
சான்றிதழ் கையொப்பங்களை சரிபார்த்தல்
சரிபார்ப்பின் முக்கிய பகுதி சான்றிதழின் கையொப்பம் செல்லுபடியாகும் என்பதை உறுதிப்படுத்துவதும், அது உரிமை கோரப்பட்ட வழங்குநரால் உருவாக்கப்பட்டது என்பதை உறுதிப்படுத்துவதும் ஆகும். இது சான்றிதழில் உள்ள கையொப்பத்தை சரிபார்க்க வழங்குநரின் பொது விசையைப் பயன்படுத்துவதை உள்ளடக்குகிறது.
இதைச் செய்ய, எங்களுக்கு முதலில் வழங்குநரின் சான்றிதழ் (அல்லது அவர்களின் பொது விசை) மற்றும் சரிபார்க்கப்பட வேண்டிய சான்றிதழ் தேவை. ஒரு நம்பிக்கைக் கடைக்கு எதிராக சரிபார்க்கும்போது cryptography நூலகம் இதை உள்நாட்டில் கையாள்கிறது.
நம்பிக்கைக் கடையை உருவாக்குதல்
நம்பிக்கைக் கடை என்பது உங்கள் பயன்பாடு நம்பும் ரூட் CA சான்றிதழ்களின் தொகுப்பாகும். இறுதி-நிறுவன சான்றிதழை (ஒரு சர்வரின் சான்றிதழ் போன்றவை) சரிபார்க்கும்போது, அதன் சங்கிலியை உங்கள் நம்பிக்கைக் கடையில் இருக்கும் ஒரு ரூட் CA க்குத் திரும்பக் கொண்டு செல்ல வேண்டும். பைத்தானின் ssl தொகுதி, TLS/SSL இணைப்புகளுக்கு இயல்பாக அடிப்படை OS நம்பிக்கைக் கடையைப் பயன்படுத்துகிறது, மேலும் தனிப்பயன் நம்பிக்கைக் கடைகளுடன் உள்ளமைக்கப்படலாம்.
cryptography ஐப் பயன்படுத்தி கைமுறையாக சரிபார்க்க, நீங்கள் பொதுவாக:
- இலக்கு சான்றிதழை ஏற்றவும்.
- வழங்குநரின் சான்றிதழை ஏற்றவும் (பெரும்பாலும் ஒரு சங்கிலி கோப்பிலிருந்து அல்லது ஒரு நம்பிக்கைக் கடையிலிருந்து).
- வழங்குநரின் சான்றிதழிலிருந்து வழங்குநரின் பொது விசையை பிரித்தெடுக்கவும்.
- வழங்குநரின் பொது விசையைப் பயன்படுத்தி இலக்கு சான்றிதழின் கையொப்பத்தை சரிபார்க்கவும்.
- உங்கள் நம்பிக்கைக் கடையில் ரூட் CA ஐ அடையும் வரை சங்கிலியில் உள்ள ஒவ்வொரு சான்றிதழுக்கும் இந்த செயல்முறையை மீண்டும் செய்யவும்.
கையொப்ப சரிபார்ப்பின் எளிமைப்படுத்தப்பட்ட விளக்கம் இங்கே:
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
def verify_certificate_signature(cert_to_verify_path, issuer_cert_path):
"""Verifies the signature of a certificate using its issuer's certificate."""
try:
with open(cert_to_verify_path, "rb") as f:
cert_data = f.read()
cert = x509.load_pem_x509_certificate(cert_data, default_backend())
with open(issuer_cert_path, "rb") as f:
issuer_cert_data = f.read()
issuer_cert = x509.load_pem_x509_certificate(issuer_cert_data, default_backend())
issuer_public_key = issuer_cert.public_key()
# The certificate object contains the signature and the signed data
# We need to perform the verification process
try:
issuer_public_key.verify(
cert.signature, # The signature itself
cert.tbs_certificate_bytes, # The data that was signed
padding.PKCS1v15(),
hashes.SHA256() # Assuming SHA256, adjust if needed
)
print(f"Signature of {cert_to_verify_path} is valid.")
return True
except Exception as e:
print(f"Signature verification failed: {e}")
return False
except FileNotFoundError as e:
print(f"Error: File not found - {e}")
return False
except Exception as e:
print(f"An error occurred: {e}")
return False
# Example usage:
# verify_certificate_signature('path/to/intermediate_cert.pem', 'path/to/root_cert.pem')
காலாவதி மற்றும் ரத்து செய்தலை சரிபார்த்தல்
செல்லுபடியாகும் காலத்தை சரிபார்ப்பது நேரடியானது:
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from datetime import datetime
def is_certificate_valid_in_time(cert_path):
"""Checks if a certificate is currently valid based on its time constraints."""
try:
with open(cert_path, "rb") as f:
cert_data = f.read()
certificate = x509.load_pem_x509_certificate(cert_data, default_backend())
now = datetime.utcnow()
if now < certificate.not_valid_before:
print(f"Certificate not yet valid. Valid from: {certificate.not_valid_before}")
return False
if now > certificate.not_valid_after:
print(f"Certificate has expired. Valid until: {certificate.not_valid_after}")
return False
print("Certificate is valid within its time constraints.")
return True
except FileNotFoundError:
print(f"Error: Certificate file not found at {cert_path}")
return False
except Exception as e:
print(f"An error occurred: {e}")
return False
# Example usage:
# is_certificate_valid_in_time('path/to/your/certificate.pem')
ரத்து நிலையை சரிபார்ப்பது மிகவும் சிக்கலானது, மேலும் இது பொதுவாக ஒரு CA இன் CRL விநியோக புள்ளி (CRLDP) அல்லது OCSP பதிலளிப்பவருடன் தொடர்புகொள்வதை உள்ளடக்குகிறது. CRLகள் மற்றும் OCSP பதில்களைப் பாகுபடுத்த cryptography நூலகம் கருவிகளை வழங்குகிறது, ஆனால் அவற்றை மீட்டெடுக்கவும் வினவவும் முழு தர்க்கத்தையும் செயல்படுத்துவதற்கு அதிக விரிவான குறியீடு தேவைப்படுகிறது. பல பயன்பாடுகளுக்கு, குறிப்பாக TLS/SSL இணைப்புகளை உள்ளடக்கியவற்றுக்கு, requests அல்லது ssl தொகுதி போன்ற நூலகங்களின் உள்ளமைக்கப்பட்ட திறன்களை மேம்படுத்துவது மிகவும் நடைமுறைக்குரியது.
TLS/SSL க்கு `ssl` தொகுதியை மேம்படுத்துதல்
பாதுகாப்பான நெட்வொர்க் இணைப்புகளை (எ.கா., HTTPS) நிறுவும்போது, பைத்தானின் உள்ளமைக்கப்பட்ட ssl தொகுதி, பெரும்பாலும் requests போன்ற நூலகங்களுடன் இணைந்து பயன்படுத்தப்படுகிறது, சான்றிதழ் சரிபார்ப்பை தானாகவே கையாள்கிறது.
உதாரணமாக, நீங்கள் requests நூலகத்தைப் பயன்படுத்தி HTTPS கோரிக்கையைச் செய்யும்போது, இது ssl ஐப் பயன்படுத்துகிறது, இது இயல்பாக:
- சேவையகத்துடன் இணைகிறது மற்றும் அதன் சான்றிதழைப் பெறுகிறது.
- சான்றிதழ் சங்கிலியை உருவாக்குகிறது.
- கணினியின் நம்பகமான ரூட் CAகளுக்கு எதிராக சான்றிதழை சரிபார்க்கிறது.
- கையொப்பம், காலாவதி மற்றும் ஹோஸ்ட்பெயரை சரிபார்க்கிறது.
இந்த சோதனைகளில் ஏதேனும் தோல்வியடைந்தால், சரிபார்ப்பு தோல்வியைக் குறிக்கும் வகையில் requests ஒரு விதிவிலக்கை உயர்த்தும்.
import requests
def fetch_url_with_ssl_validation(url):
"""Fetches a URL, performing default SSL certificate validation."""
try:
response = requests.get(url)
response.raise_for_status() # Raises an HTTPError for bad responses (4xx or 5xx)
print(f"Successfully fetched {url}. Status code: {response.status_code}")
return response.text
except requests.exceptions.SSLError as e:
print(f"SSL Error for {url}: {e}")
print("This often indicates a certificate validation failure.")
return None
except requests.exceptions.RequestException as e:
print(f"An error occurred while fetching {url}: {e}")
return None
# Example usage:
# url = "https://www.google.com"
# fetch_url_with_ssl_validation(url)
# Example of a URL that might fail validation (e.g., self-signed cert)
# invalid_url = "https://expired.badssl.com/"
# fetch_url_with_ssl_validation(invalid_url)
SSL சரிபார்ப்பை முடக்குதல் (அதிக எச்சரிக்கையுடன் பயன்படுத்தவும்!)
சோதனை நோக்கங்களுக்காகவோ அல்லது கட்டுப்படுத்தப்பட்ட சூழல்களிலோ பயன்படுத்தப்பட்டாலும், SSL சரிபார்ப்பை முடக்குவது உற்பத்தி பயன்பாடுகளுக்கு மிகவும் ஊக்கமளிக்கவில்லை, ஏனெனில் இது பாதுகாப்பு சோதனைகளை முழுமையாகத் தவிர்க்கிறது, இது உங்கள் பயன்பாட்டை மனிதன்-நடுவில் தாக்குதல்களுக்கு ஆளாக்குகிறது. requests.get() இல் verify=False ஐ அமைப்பதன் மூலம் இதைச் செய்யலாம்.
# WARNING: DO NOT use verify=False in production environments!
# try:
# response = requests.get(url, verify=False)
# print(f"Fetched {url} without verification.")
# except requests.exceptions.RequestException as e:
# print(f"Error fetching {url}: {e}")
TLS/SSL இணைப்புகள் மற்றும் ssl தொகுதியுடன் கூடிய தனிப்பயன் நம்பிக்கைக் கடைகள் மீது அதிக நுணுக்கமான கட்டுப்பாட்டிற்கு, நீங்கள் ssl.SSLContext பொருளை உருவாக்கலாம். நம்பகமான CAகள், சைஃபர் தொகுப்புகள் மற்றும் பிற பாதுகாப்பு அளவுருக்களைக் குறிப்பிட இது உங்களை அனுமதிக்கிறது.
import ssl
import socket
def fetch_url_with_custom_ssl_context(url, ca_certs_path=None):
"""Fetches a URL using a custom SSL context."""
try:
hostname = url.split('//')[1].split('/')[0]
port = 443
context = ssl.create_default_context()
if ca_certs_path:
context.load_verify_locations(cafile=ca_certs_path)
with socket.create_connection((hostname, port)) as sock:
with context.wrap_socket(sock, server_hostname=hostname) as ssock:
ssock.sendall(f"GET {url.split('//')[1].split('/', 1)[1] if '/' in url.split('//')[1] else '/'} HTTP/1.1\r\nHost: {hostname}\r\nConnection: close\r\nAccept-Encoding: identity\r\n\r\n".encode())
response = b''
while True:
chunk = ssock.recv(4096)
if not chunk:
break
response += chunk
print(f"Successfully fetched {url} with custom SSL context.")
return response.decode(errors='ignore')
except FileNotFoundError:
print(f"Error: CA certificates file not found at {ca_certs_path}")
return None
except ssl.SSLCertVerificationError as e:
print(f"SSL Certificate Verification Error for {url}: {e}")
return None
except Exception as e:
print(f"An error occurred: {e}")
return None
# Example usage (assuming you have a custom CA bundle, e.g., 'my_custom_ca.pem'):
# custom_ca_bundle = 'path/to/your/my_custom_ca.pem'
# fetch_url_with_custom_ssl_context("https://example.com", ca_certs_path=custom_ca_bundle)
மேம்பட்ட சரிபார்ப்பு சூழ்நிலைகள் மற்றும் கருத்தில் கொள்ள வேண்டியவை
ஹோஸ்ட்பெயர் சரிபார்ப்பு
முக்கியமாக, சான்றிதழ் சரிபார்ப்பில் நீங்கள் இணைக்கும் சேவையகத்தின் ஹோஸ்ட்பெயர் (அல்லது IP முகவரி) சான்றிதழில் உள்ள பொருள் பெயர் அல்லது பொருள் மாற்று பெயர் (SAN) உள்ளீட்டுடன் பொருந்துகிறதா என்பதை சரிபார்க்க வேண்டும். ssl தொகுதி மற்றும் requests போன்ற நூலகங்கள் TLS/SSL இணைப்புகளுக்கு இதை தானாகவே செய்கின்றன. பொருந்தாத நிலை இருந்தால், இணைப்பு தோல்வியடையும், ஏமாற்று சேவையகங்களுக்கான இணைப்புகளைத் தடுக்கும்.
cryptography நூலகத்துடன் சான்றிதழ்களை கைமுறையாக சரிபார்க்கும்போது, இதை நீங்கள் வெளிப்படையாக சரிபார்க்க வேண்டும்:
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.x509.oid import NameOID
def verify_hostname_in_certificate(cert_path, hostname):
"""Checks if the provided hostname is present in the certificate's SAN or Subject DN."""
try:
with open(cert_path, "rb") as f:
cert_data = f.read()
certificate = x509.load_pem_x509_certificate(cert_data, default_backend())
# 1. Check Subject Alternative Names (SAN)
try:
san_extension = certificate.extensions.get_extension_for_class(x509.SubjectAlternativeName)
san_names = san_extension.value.get_values_for_type(x509.DNSName)
if hostname in san_names:
print(f"Hostname '{hostname}' found in SAN.")
return True
except x509.ExtensionNotFound:
pass # SAN not present, proceed to Subject DN
# 2. Check Common Name (CN) in Subject Distinguished Name (DN)
# Note: CN validation is often deprecated in favor of SAN, but still checked.
subject_dn = certificate.subject
common_name = subject_dn.get_attributes_for_oid(NameOID.COMMON_NAME)
if common_name and common_name[0].value == hostname:
print(f"Hostname '{hostname}' matches Common Name in Subject DN.")
return True
print(f"Hostname '{hostname}' not found in certificate's SAN or Subject CN.")
return False
except FileNotFoundError:
print(f"Error: Certificate file not found at {cert_path}")
return False
except Exception as e:
print(f"An error occurred: {e}")
return False
# Example usage:
# verify_hostname_in_certificate('path/to/server.pem', 'www.example.com')
முழு சான்றிதழ் சங்கிலியை உருவாக்குதல்
சான்றிதழ் சங்கிலியில் இறுதி-நிறுவன சான்றிதழ், அதைத் தொடர்ந்து நம்பகமான ரூட் CA சான்றிதழ் வரை எந்த இடைநிலை CA சான்றிதழ்களும் இருக்கும். சரிபார்ப்புக்கு, உங்கள் பயன்பாடு இந்த சங்கிலியை மீண்டும் உருவாக்கவும் ஒவ்வொரு இணைப்பையும் சரிபார்க்கவும் முடியும். TLS கைக்குலுக்கலின்போது சேவையகம் தனது சொந்த சான்றிதழுடன் இடைநிலை சான்றிதழ்களை அனுப்புவதன் மூலம் இது பெரும்பாலும் உதவுகிறது.
நீங்கள் கைமுறையாக ஒரு சங்கிலியை உருவாக்க வேண்டியிருந்தால், உங்களிடம் நம்பகமான ரூட் சான்றிதழ்கள் மற்றும் சாத்தியமான இடைநிலை சான்றிதழ்களின் தொகுப்பு இருக்கும். இந்த செயல்முறை பின்வருமாறு:
- இறுதி-நிறுவன சான்றிதழுடன் தொடங்குதல்.
- கிடைக்கக்கூடிய சான்றிதழ்களில் அதன் வழங்குநரின் சான்றிதழை கண்டறிதல்.
- வழங்குநரின் பொது விசையைப் பயன்படுத்தி இறுதி-நிறுவன சான்றிதழின் கையொப்பத்தை சரிபார்க்கவும்.
- ஒரு சான்றிதழை அடையும் வரை இதை மீண்டும் செய்யவும், அது அதன் சொந்த வழங்குநராகும் (ஒரு ரூட் CA) மற்றும் உங்கள் நம்பகமான ரூட் கடையில் உள்ளது.
இதை புதிதாகச் செயல்படுத்துவது மிகவும் சிக்கலானதாக இருக்கும். மேம்பட்ட PKI செயல்பாடுகளுக்காக வடிவமைக்கப்பட்ட நூலகங்கள் அல்லது TLS நூலகங்களுக்குள் உள்ள வலுவான செயலாக்கங்களைச் சார்ந்திருப்பது பெரும்பாலும் விரும்பப்படுகிறது.
நேரம் சார்ந்த சரிபார்ப்பு (காலாவதிக்கு அப்பால்)
not_valid_before மற்றும் not_valid_after ஐ சரிபார்ப்பது அடிப்படை என்றாலும், நுணுக்கங்களைக் கவனியுங்கள்:
- கடிகார சாய்வு: உங்கள் கணினியின் கடிகாரம் ஒத்திசைக்கப்பட்டுள்ளதா என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள். குறிப்பிடத்தக்க கடிகார சாய்வு முன்கூட்டிய சரிபார்ப்பு தோல்விகளுக்கு அல்லது காலாவதியான சான்றிதழ்களை ஏற்க வழிவகுக்கும்.
- லீப் வினாடிகள்: சான்றிதழ் செல்லுபடியாகும் காலத்திற்கு இது அரிதாக இருந்தாலும், மிகவும் துல்லியமான நேரம் முக்கியமாக இருந்தால், லீப் வினாடிகளின் சாத்தியமான தாக்கங்களைப் பற்றி எச்சரிக்கையாக இருங்கள்.
ரத்து செய்தல் சரிபார்ப்பு (CRL மற்றும் OCSP)
குறிப்பிட்டுள்ளபடி, ரத்து செய்தல் சரிபார்ப்பு செயல்முறையின் முக்கியமான பகுதியாகும். தனிப்பட்ட விசை சமரசம் செய்யப்பட்டாலோ, பொருள் தகவல் மாறினாலோ அல்லது CA கொள்கை ரத்து செய்ய கட்டளையிட்டாலோ ஒரு சான்றிதழ் ரத்து செய்யப்படலாம்.
- CRLs: இவை CA களால் வெளியிடப்படுகின்றன, மேலும் அவை பெரியதாக இருக்கலாம், அடிக்கடி பதிவிறக்குவது மற்றும் பாகுபடுத்துவது திறமையற்றது.
- OCSP: இது நிகழ்நேர நிலை சரிபார்ப்பை வழங்குகிறது, ஆனால் தாமதம் மற்றும் தனியுரிமை கவலைகளை அறிமுகப்படுத்தலாம் (கிளையண்டின் கோரிக்கை எந்த சான்றிதழை சரிபார்க்கிறது என்பதை வெளிப்படுத்துவதால்).
வலுவான CRL/OCSP சரிபார்ப்பைச் செயல்படுத்துவதில் பின்வருவன அடங்கும்:
- சான்றிதழுக்குள் OCSP URIகளுக்கான CRL விநியோக புள்ளிகள் (CRLDP) அல்லது அதிகார தகவல் அணுகல் (AIA) நீட்டிப்பைக் கண்டறிதல்.
- தொடர்புடைய CRL ஐ மீட்டெடுப்பது அல்லது OCSP கோரிக்கையைத் தொடங்குவது.
- பதிலை பாகுபடுத்துவது மற்றும் கேள்விக்குரிய சான்றிதழின் வரிசை எண்ணை சரிபார்க்கவும்.
நீங்கள் TLS சூழலுக்கு வெளியே அவற்றைச் செயல்படுத்த வேண்டியிருந்தால், pyOpenSSL நூலகம் அல்லது சிறப்பு PKI நூலகங்கள் இந்த செயல்பாடுகளுக்கு அதிக நேரடி ஆதரவை வழங்கக்கூடும்.
PKI செயல்படுத்தலுக்கான உலகளாவிய பரிசீலனைகள்
உலகளாவிய பார்வையாளர்களுக்காக PKI மற்றும் சான்றிதழ் சரிபார்ப்பை நம்பியிருக்கும் பயன்பாடுகளை உருவாக்கும்போது, பல காரணிகள் செயல்பாட்டுக்கு வருகின்றன:
- ரூட் CA நம்பிக்கைக் கடைகள்: வெவ்வேறு இயக்க முறைமைகள் மற்றும் தளங்கள் அவற்றின் சொந்த ரூட் CA நம்பிக்கைக் கடைகளை பராமரிக்கின்றன. உதாரணமாக, விண்டோஸ், macOS மற்றும் லினக்ஸ் விநியோகங்கள் நம்பகமான CAகளின் அவற்றின் இயல்புநிலை பட்டியல்களைக் கொண்டுள்ளன. உங்கள் பயன்பாட்டின் நம்பிக்கைக் கடை பொதுவான உலகளாவிய தரங்களுடன் ஒத்துப்போகிறதா அல்லது உங்கள் பயனர்களின் பிராந்தியங்களுக்கு தொடர்புடைய குறிப்பிட்ட CAகளை ஏற்க உள்ளமைக்கக்கூடியதா என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்.
- பிராந்திய சான்றிதழ் அதிகாரிகள்: உலகளாவிய CAகளைத் தவிர (லெட்ஸ் என்க்ரிப்ட், டிஜிகெர்ட், குளோபல்சைன் போன்றவை), பல பிராந்தியங்கள் தங்கள் சொந்த தேசிய அல்லது தொழில் சார்ந்த CAகளைக் கொண்டுள்ளன. நீங்கள் அந்த அதிகார வரம்புகளுக்குள் செயல்பட்டால், உங்கள் பயன்பாடு இவற்றின் மீது நம்பிக்கை வைக்க வேண்டியிருக்கும்.
- ஒழுங்குமுறை இணக்கம்: தரவு பாதுகாப்பு, மறைகுறியாக்கம் மற்றும் டிஜிட்டல் அடையாளம் குறித்து பல்வேறு நாடுகள் வேறுபட்ட விதிமுறைகளைக் கொண்டுள்ளன. உங்கள் PKI செயல்படுத்தல் தொடர்புடைய சட்டங்களுக்கு (எ.கா., ஐரோப்பாவில் GDPR, கலிபோர்னியாவில் CCPA, சீனாவில் PIPL) இணங்குவதை உறுதிப்படுத்திக் கொள்ளுங்கள். சில விதிமுறைகள் குறிப்பிட்ட வகையான சான்றிதழ்கள் அல்லது CAகளைப் பயன்படுத்த கட்டாயப்படுத்தலாம்.
- நேர மண்டலங்கள் மற்றும் ஒத்திசைவு: சான்றிதழ் செல்லுபடியாகும் காலங்கள் UTC இல் வெளிப்படுத்தப்படுகின்றன. இருப்பினும், பயனர் கருத்து மற்றும் கணினி கடிகாரங்கள் நேர மண்டலங்களால் பாதிக்கப்படலாம். சான்றிதழ் சரிபார்ப்பு உட்பட அனைத்து நேரம் சார்ந்த செயல்பாடுகளுக்கும் உங்கள் பயன்பாடு தொடர்ந்து UTC ஐப் பயன்படுத்துவதை உறுதிப்படுத்திக் கொள்ளுங்கள்.
- செயல்திறன் மற்றும் தாமதம்: நெட்வொர்க் தாமதம் சரிபார்ப்பு செயல்முறைகளின் செயல்திறனை பாதிக்கலாம், குறிப்பாக அவை CRLகள் அல்லது OCSP பதில்களுக்கான வெளிப்புறத் தேடல்களை உள்ளடக்கியிருந்தால். சாத்தியமான இடங்களில் கேச்சிங் வழிமுறைகளைக் கருத்தில் கொள்ளுங்கள் அல்லது இந்த தேடல்களை மேம்படுத்துங்கள்.
- மொழி மற்றும் உள்ளூர்மயமாக்கல்: கிரிப்டோகிராஃபிக் செயல்பாடுகள் மொழி-அறியப்படாதவை என்றாலும், பிழை செய்திகள், பாதுகாப்பு தொடர்பான பயனர் இடைமுக கூறுகள் மற்றும் ஆவணங்கள் உலகளாவிய பயனர் தளத்திற்காக உள்ளூர்மயமாக்கப்பட வேண்டும்.
பைத்தான் PKI செயல்படுத்தலுக்கான சிறந்த நடைமுறைகள்
- எப்போதும் சரிபார்க்கவும்: உற்பத்தி குறியீட்டில் சான்றிதழ் சரிபார்ப்பை ஒருபோதும் முடக்க வேண்டாம். குறிப்பிட்ட, கட்டுப்படுத்தப்பட்ட சோதனை சூழ்நிலைகளுக்கு மட்டுமே பயன்படுத்தவும்.
- நிர்வகிக்கப்பட்ட நூலகங்களைப் பயன்படுத்தவும்: கிரிப்டோகிராஃபிக் பிரமிட்டிவ்களுக்கு
cryptographyபோன்ற முதிர்ச்சியடைந்த மற்றும் நன்கு பராமரிக்கப்படும் நூலகங்களையும், நெட்வொர்க் பாதுகாப்பிற்காகrequestsஅல்லது உள்ளமைக்கப்பட்டsslதொகுதியையும் பயன்படுத்தவும். - நம்பிக்கைக் கடைகளை புதுப்பித்த நிலையில் வைத்திருங்கள்: உங்கள் பயன்பாட்டால் பயன்படுத்தப்படும் நம்பகமான ரூட் CA சான்றிதழ்களை தவறாமல் புதுப்பிக்கவும். இது உங்கள் கணினி புதிதாக வெளியிடப்பட்ட சரியான சான்றிதழ்களை நம்புவதையும் சமரசம் செய்யப்பட்ட CAகளை நம்பாமல் இருக்கவும் உறுதி செய்கிறது.
- ரத்து செய்தலை கண்காணிக்கவும்: ரத்து செய்யப்பட்ட சான்றிதழ்களுக்கு வலுவான சரிபார்ப்பை செயல்படுத்தவும், குறிப்பாக உயர் பாதுகாப்பு சூழல்களில்.
- தனிப்பட்ட விசைகளைப் பாதுகாக்கவும்: உங்கள் பயன்பாட்டில் தனிப்பட்ட விசைகளை உருவாக்குவது அல்லது நிர்வகிப்பது இருந்தால், அவை பாதுகாப்பாக சேமிக்கப்படுவதை உறுதிப்படுத்திக் கொள்ளுங்கள், குறிப்பாக வன்பொருள் பாதுகாப்பு தொகுதிகள் (HSMகள்) அல்லது பாதுகாப்பான விசை மேலாண்மை அமைப்புகளைப் பயன்படுத்துங்கள்.
- பதிவு செய்து எச்சரிக்கை செய்யவும்: வெற்றிகள் மற்றும் தோல்விகள் உட்பட சான்றிதழ் சரிபார்ப்பு நிகழ்வுகளுக்கு விரிவான பதிவைச் செயல்படுத்தவும். தொடர்ச்சியான சரிபார்ப்பு பிழைகளுக்கு எச்சரிக்கைகளை அமைக்கவும், அவை தொடர்ந்து பாதுகாப்பு சிக்கல்களைக் குறிக்கலாம்.
- தகவலுடன் இருங்கள்: சைபர் பாதுகாப்பு மற்றும் PKI இன் நிலப்பரப்பு தொடர்ந்து மாறிக்கொண்டே இருக்கிறது. புதிய பாதிப்புகள், சிறந்த நடைமுறைகள் மற்றும் வளர்ந்து வரும் தரநிலைகள் (TLS 1.3 மற்றும் சான்றிதழ் சரிபார்ப்பிற்கான அதன் தாக்கங்கள் போன்றவை) குறித்து தொடர்ந்து தெரிந்துகொள்ளுங்கள்.
முடிவுரை
டிஜிட்டல் தகவல்தொடர்புகளைப் பாதுகாப்பதற்கு பொது விசை உள்கட்டமைப்பு மற்றும் சான்றிதழ் சரிபார்ப்பு அடிப்படை. cryptography போன்ற நூலகங்கள் மற்றும் அதன் உள்ளமைக்கப்பட்ட ssl தொகுதி மூலம் பைத்தான் இந்த பாதுகாப்பு நடவடிக்கைகளை திறம்பட செயல்படுத்துவதற்கு சக்திவாய்ந்த கருவிகளை வழங்குகிறது. PKI இன் முக்கிய கருத்துக்களைப் புரிந்துகொள்வதன் மூலமும், பைத்தானில் சான்றிதழ் சரிபார்ப்பு நுட்பங்களில் தேர்ச்சி பெறுவதன் மூலமும், உலகளாவிய சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலமும், டெவலப்பர்கள் பாதுகாப்பான பயன்பாடுகளை உருவாக்குவது மட்டுமல்லாமல், உலகளவில் பயனர்களுக்கு நம்பகமான பயன்பாடுகளையும் உருவாக்க முடியும். வலுவான சான்றிதழ் சரிபார்ப்பு என்பது ஒரு தொழில்நுட்ப தேவை மட்டுமல்ல என்பதை நினைவில் கொள்ளுங்கள்; டிஜிட்டல் யுகத்தில் பயனர் நம்பிக்கையை உருவாக்குவதற்கும் பராமரிப்பதற்கும் இது ஒரு முக்கியமான அங்கமாகும்.