mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			177 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Πιστοποιητικά
 | 
						||
 | 
						||
{{#include ../banners/hacktricks-training.md}}
 | 
						||
 | 
						||
## Τι είναι ένα Πιστοποιητικό
 | 
						||
 | 
						||
Ένα **δημόσιο κλειδί πιστοποιητικό** είναι μια ψηφιακή ταυτότητα που χρησιμοποιείται στην κρυπτογραφία για να αποδείξει ότι κάποιος κατέχει ένα δημόσιο κλειδί. Περιλαμβάνει τις λεπτομέρειες του κλειδιού, την ταυτότητα του κατόχου (το υποκείμενο) και μια ψηφιακή υπογραφή από μια αξιόπιστη αρχή (τον εκδότη). Εάν το λογισμικό εμπιστεύεται τον εκδότη και η υπογραφή είναι έγκυρη, είναι δυνατή η ασφαλής επικοινωνία με τον κάτοχο του κλειδιού.
 | 
						||
 | 
						||
Τα πιστοποιητικά εκδίδονται κυρίως από [αρχές πιστοποίησης](https://en.wikipedia.org/wiki/Certificate_authority) (CAs) σε μια [υποδομή δημόσιου κλειδιού](https://en.wikipedia.org/wiki/Public-key_infrastructure) (PKI). Μια άλλη μέθοδος είναι το [δίκτυο εμπιστοσύνης](https://en.wikipedia.org/wiki/Web_of_trust), όπου οι χρήστες επαληθεύουν άμεσα τα κλειδιά ο ένας του άλλου. Η κοινή μορφή για τα πιστοποιητικά είναι [X.509](https://en.wikipedia.org/wiki/X.509), η οποία μπορεί να προσαρμοστεί για συγκεκριμένες ανάγκες όπως περιγράφεται στο RFC 5280.
 | 
						||
 | 
						||
## x509 Κοινά Πεδία
 | 
						||
 | 
						||
### **Κοινά Πεδία σε Πιστοποιητικά x509**
 | 
						||
 | 
						||
Στα πιστοποιητικά x509, αρκετά **πεδία** παίζουν κρίσιμους ρόλους στην εξασφάλιση της εγκυρότητας και της ασφάλειας του πιστοποιητικού. Ακολουθεί μια ανάλυση αυτών των πεδίων:
 | 
						||
 | 
						||
- **Αριθμός Έκδοσης** σηματοδοτεί την έκδοση της μορφής x509.
 | 
						||
- **Αριθμός Σειράς** προσδιορίζει μοναδικά το πιστοποιητικό μέσα στο σύστημα μιας Αρχής Πιστοποίησης (CA), κυρίως για παρακολούθηση ανάκλησης.
 | 
						||
- Το **Υποκείμενο** πεδίο αντιπροσωπεύει τον κάτοχο του πιστοποιητικού, ο οποίος μπορεί να είναι μια μηχανή, ένα άτομο ή ένας οργανισμός. Περιλαμβάνει λεπτομερή ταυτοποίηση όπως:
 | 
						||
- **Κοινό Όνομα (CN)**: Τομείς που καλύπτονται από το πιστοποιητικό.
 | 
						||
- **Χώρα (C)**, **Τοποθεσία (L)**, **Πολιτεία ή Επαρχία (ST, S, ή P)**, **Οργάνωση (O)**, και **Οργανωτική Μονάδα (OU)** παρέχουν γεωγραφικές και οργανωτικές λεπτομέρειες.
 | 
						||
- **Διακεκριμένο Όνομα (DN)** περιλαμβάνει την πλήρη ταυτοποίηση του υποκειμένου.
 | 
						||
- **Εκδότης** αναφέρει ποιος επαλήθευσε και υπέγραψε το πιστοποιητικό, συμπεριλαμβάνοντας παρόμοια υποπεδία όπως το Υποκείμενο για την CA.
 | 
						||
- **Περίοδος Ικανότητας** σηματοδοτείται από τις χρονικές σφραγίδες **Όχι Πριν** και **Όχι Μετά**, εξασφαλίζοντας ότι το πιστοποιητικό δεν χρησιμοποιείται πριν ή μετά από μια συγκεκριμένη ημερομηνία.
 | 
						||
- Η ενότητα **Δημόσιου Κλειδιού**, κρίσιμη για την ασφάλεια του πιστοποιητικού, προσδιορίζει τον αλγόριθμο, το μέγεθος και άλλες τεχνικές λεπτομέρειες του δημόσιου κλειδιού.
 | 
						||
- Οι **επέκταση x509v3** ενισχύουν τη λειτουργικότητα του πιστοποιητικού, προσδιορίζοντας **Χρήση Κλειδιού**, **Εκτεταμένη Χρήση Κλειδιού**, **Εναλλακτικό Όνομα Υποκειμένου**, και άλλες ιδιότητες για την ακριβή ρύθμιση της εφαρμογής του πιστοποιητικού.
 | 
						||
 | 
						||
#### **Χρήση Κλειδιού και Επεκτάσεις**
 | 
						||
 | 
						||
- **Χρήση Κλειδιού** προσδιορίζει τις κρυπτογραφικές εφαρμογές του δημόσιου κλειδιού, όπως ψηφιακή υπογραφή ή κρυπτογράφηση κλειδιού.
 | 
						||
- **Εκτεταμένη Χρήση Κλειδιού** περιορίζει περαιτέρω τις περιπτώσεις χρήσης του πιστοποιητικού, π.χ., για πιστοποίηση διακομιστή TLS.
 | 
						||
- **Εναλλακτικό Όνομα Υποκειμένου** και **Βασικός Περιορισμός** καθορίζουν πρόσθετα ονόματα κεντρικών υπολογιστών που καλύπτονται από το πιστοποιητικό και αν είναι πιστοποιητικό CA ή τελικού φορέα, αντίστοιχα.
 | 
						||
- Αναγνωριστικά όπως **Αναγνωριστικό Κλειδιού Υποκειμένου** και **Αναγνωριστικό Κλειδιού Αρχής** εξασφαλίζουν μοναδικότητα και ιχνηλασιμότητα των κλειδιών.
 | 
						||
- **Πρόσβαση Πληροφοριών Αρχής** και **Σημεία Διανομής CRL** παρέχουν διαδρομές για την επαλήθευση της εκδούσας CA και τον έλεγχο της κατάστασης ανάκλησης του πιστοποιητικού.
 | 
						||
- **CT Προπιστοποιητικά SCTs** προσφέρουν διαφάνεια, κρίσιμη για τη δημόσια εμπιστοσύνη στο πιστοποιητικό.
 | 
						||
```python
 | 
						||
# Example of accessing and using x509 certificate fields programmatically:
 | 
						||
from cryptography import x509
 | 
						||
from cryptography.hazmat.backends import default_backend
 | 
						||
 | 
						||
# Load an x509 certificate (assuming cert.pem is a certificate file)
 | 
						||
with open("cert.pem", "rb") as file:
 | 
						||
cert_data = file.read()
 | 
						||
certificate = x509.load_pem_x509_certificate(cert_data, default_backend())
 | 
						||
 | 
						||
# Accessing fields
 | 
						||
serial_number = certificate.serial_number
 | 
						||
issuer = certificate.issuer
 | 
						||
subject = certificate.subject
 | 
						||
public_key = certificate.public_key()
 | 
						||
 | 
						||
print(f"Serial Number: {serial_number}")
 | 
						||
print(f"Issuer: {issuer}")
 | 
						||
print(f"Subject: {subject}")
 | 
						||
print(f"Public Key: {public_key}")
 | 
						||
```
 | 
						||
### **Διαφορά μεταξύ OCSP και CRL Distribution Points**
 | 
						||
 | 
						||
**OCSP** (**RFC 2560**) περιλαμβάνει έναν πελάτη και έναν απαντητή που συνεργάζονται για να ελέγξουν αν ένα ψηφιακό πιστοποιητικό δημόσιου κλειδιού έχει ανακληθεί, χωρίς να χρειάζεται να κατεβάσουν ολόκληρη την **CRL**. Αυτή η μέθοδος είναι πιο αποδοτική από την παραδοσιακή **CRL**, η οποία παρέχει μια λίστα με τους αριθμούς σειράς των ανακληθέντων πιστοποιητικών αλλά απαιτεί τη λήψη ενός ενδεχομένως μεγάλου αρχείου. Οι CRLs μπορούν να περιλαμβάνουν έως 512 καταχωρίσεις. Περισσότερες λεπτομέρειες είναι διαθέσιμες [εδώ](https://www.arubanetworks.com/techdocs/ArubaOS%206_3_1_Web_Help/Content/ArubaFrameStyles/CertRevocation/About_OCSP_and_CRL.htm).
 | 
						||
 | 
						||
### **Τι είναι η Διαφάνεια Πιστοποιητικών**
 | 
						||
 | 
						||
Η Διαφάνεια Πιστοποιητικών βοηθά στην καταπολέμηση των απειλών που σχετίζονται με τα πιστοποιητικά, διασφαλίζοντας ότι η έκδοση και η ύπαρξη των SSL πιστοποιητικών είναι ορατές στους ιδιοκτήτες τομέων, τις CA και τους χρήστες. Οι στόχοι της είναι:
 | 
						||
 | 
						||
- Να αποτρέψει τις CA από το να εκδίδουν SSL πιστοποιητικά για έναν τομέα χωρίς τη γνώση του ιδιοκτήτη του τομέα.
 | 
						||
- Να καθιερώσει ένα ανοιχτό σύστημα ελέγχου για την παρακολούθηση πιστοποιητικών που εκδόθηκαν κατά λάθος ή κακόβουλα.
 | 
						||
- Να προστατεύσει τους χρήστες από δόλια πιστοποιητικά.
 | 
						||
 | 
						||
#### **Καταγραφές Πιστοποιητικών**
 | 
						||
 | 
						||
Οι καταγραφές πιστοποιητικών είναι δημόσια ελεγχόμενα, μόνο προσθετικά αρχεία πιστοποιητικών, που διατηρούνται από υπηρεσίες δικτύου. Αυτές οι καταγραφές παρέχουν κρυπτογραφικές αποδείξεις για σκοπούς ελέγχου. Τόσο οι αρχές έκδοσης όσο και το κοινό μπορούν να υποβάλουν πιστοποιητικά σε αυτές τις καταγραφές ή να τα ελέγξουν για επαλήθευση. Ενώ ο ακριβής αριθμός των διακομιστών καταγραφής δεν είναι σταθερός, αναμένεται να είναι λιγότερος από χίλια παγκοσμίως. Αυτοί οι διακομιστές μπορούν να διαχειρίζονται ανεξάρτητα από τις CA, ISPs ή οποιαδήποτε ενδιαφερόμενη οντότητα.
 | 
						||
 | 
						||
#### **Ερώτημα**
 | 
						||
 | 
						||
Για να εξερευνήσετε τις καταγραφές Διαφάνειας Πιστοποιητικών για οποιονδήποτε τομέα, επισκεφθείτε [https://crt.sh/](https://crt.sh).
 | 
						||
 | 
						||
Διαφορετικές μορφές υπάρχουν για την αποθήκευση πιστοποιητικών, καθεμία με τις δικές της περιπτώσεις χρήσης και συμβατότητα. Αυτή η σύνοψη καλύπτει τις κύριες μορφές και παρέχει καθοδήγηση για τη μετατροπή μεταξύ τους.
 | 
						||
 | 
						||
## **Μορφές**
 | 
						||
 | 
						||
### **Μορφή PEM**
 | 
						||
 | 
						||
- Η πιο ευρέως χρησιμοποιούμενη μορφή για πιστοποιητικά.
 | 
						||
- Απαιτεί ξεχωριστά αρχεία για πιστοποιητικά και ιδιωτικά κλειδιά, κωδικοποιημένα σε Base64 ASCII.
 | 
						||
- Κοινές επεκτάσεις: .cer, .crt, .pem, .key.
 | 
						||
- Χρησιμοποιείται κυρίως από Apache και παρόμοιους διακομιστές.
 | 
						||
 | 
						||
### **Μορφή DER**
 | 
						||
 | 
						||
- Μια δυαδική μορφή πιστοποιητικών.
 | 
						||
- Λείπουν οι δηλώσεις "BEGIN/END CERTIFICATE" που βρίσκονται σε αρχεία PEM.
 | 
						||
- Κοινές επεκτάσεις: .cer, .der.
 | 
						||
- Συχνά χρησιμοποιείται με πλατφόρμες Java.
 | 
						||
 | 
						||
### **Μορφή P7B/PKCS#7**
 | 
						||
 | 
						||
- Αποθηκεύεται σε Base64 ASCII, με επεκτάσεις .p7b ή .p7c.
 | 
						||
- Περιέχει μόνο πιστοποιητικά και πιστοποιητικά αλυσίδας, εξαιρώντας το ιδιωτικό κλειδί.
 | 
						||
- Υποστηρίζεται από Microsoft Windows και Java Tomcat.
 | 
						||
 | 
						||
### **Μορφή PFX/P12/PKCS#12**
 | 
						||
 | 
						||
- Μια δυαδική μορφή που περιλαμβάνει πιστοποιητικά διακομιστή, ενδιάμεσα πιστοποιητικά και ιδιωτικά κλειδιά σε ένα αρχείο.
 | 
						||
- Επεκτάσεις: .pfx, .p12.
 | 
						||
- Χρησιμοποιείται κυρίως σε Windows για εισαγωγή και εξαγωγή πιστοποιητικών.
 | 
						||
 | 
						||
### **Μετατροπή Μορφών**
 | 
						||
 | 
						||
**Οι μετατροπές PEM** είναι απαραίτητες για τη συμβατότητα:
 | 
						||
 | 
						||
- **x509 σε PEM**
 | 
						||
```bash
 | 
						||
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
 | 
						||
```
 | 
						||
- **PEM σε DER**
 | 
						||
```bash
 | 
						||
openssl x509 -outform der -in certificatename.pem -out certificatename.der
 | 
						||
```
 | 
						||
- **DER σε PEM**
 | 
						||
```bash
 | 
						||
openssl x509 -inform der -in certificatename.der -out certificatename.pem
 | 
						||
```
 | 
						||
- **PEM σε P7B**
 | 
						||
```bash
 | 
						||
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
 | 
						||
```
 | 
						||
- **PKCS7 σε PEM**
 | 
						||
```bash
 | 
						||
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
 | 
						||
```
 | 
						||
**Οι μετατροπές PFX** είναι κρίσιμες για τη διαχείριση πιστοποιητικών στα Windows:
 | 
						||
 | 
						||
- **PFX σε PEM**
 | 
						||
```bash
 | 
						||
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
 | 
						||
```
 | 
						||
- **PFX σε PKCS#8** περιλαμβάνει δύο βήματα:
 | 
						||
1. Μετατροπή PFX σε PEM
 | 
						||
```bash
 | 
						||
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
 | 
						||
```
 | 
						||
2. Μετατροπή PEM σε PKCS8
 | 
						||
```bash
 | 
						||
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
 | 
						||
```
 | 
						||
- **P7B σε PFX** απαιτεί επίσης δύο εντολές:
 | 
						||
1. Μετατροπή P7B σε CER
 | 
						||
```bash
 | 
						||
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
 | 
						||
```
 | 
						||
2. Μετατροπή CER και Ιδιωτικού Κλειδιού σε PFX
 | 
						||
```bash
 | 
						||
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
 | 
						||
```
 | 
						||
- **ASN.1 (DER/PEM) επεξεργασία** (λειτουργεί με πιστοποιητικά ή σχεδόν οποιαδήποτε άλλη δομή ASN.1):
 | 
						||
1. Clone [asn1template](https://github.com/wllm-rbnt/asn1template/)
 | 
						||
```bash
 | 
						||
git clone https://github.com/wllm-rbnt/asn1template.git
 | 
						||
```
 | 
						||
2. Μετατροπή DER/PEM στη μορφή παραγωγής του OpenSSL
 | 
						||
```bash
 | 
						||
asn1template/asn1template.pl certificatename.der > certificatename.tpl
 | 
						||
asn1template/asn1template.pl -p certificatename.pem > certificatename.tpl
 | 
						||
```
 | 
						||
3. Επεξεργαστείτε το certificatename.tpl σύμφωνα με τις απαιτήσεις σας
 | 
						||
```bash
 | 
						||
vim certificatename.tpl
 | 
						||
```
 | 
						||
4. Ανακατασκευάστε το τροποποιημένο πιστοποιητικό
 | 
						||
```bash
 | 
						||
openssl asn1parse -genconf certificatename.tpl -out certificatename_new.der
 | 
						||
openssl asn1parse -genconf certificatename.tpl -outform PEM -out certificatename_new.pem
 | 
						||
```
 | 
						||
--- 
 | 
						||
 | 
						||
{{#include ../banners/hacktricks-training.md}}
 |