Πιστοποιητικά

Μια από τις πιο κοινές μορφές κρυπτογραφίας σήμερα είναι η κρυπτογραφία δημόσιου-κλειδιού. Η κρυπτογραφία δημοσίου κλειδιού χρησιμοποιεί ένα δημόσιο κλειδί και ένα ιδιωτικό κλειδί. Το σύστημα λειτουργεί κρυπτογραφώντας πληροφορίες με τη χρήση του δημόσιου κλειδιού. Οι πληροφορίες μπορούν να αποκρυπτογραφηθούν μόνο με τη χρήση του ιδιωτικού κλειδιού.

Μια κοινή χρήσης της κρυπτογραφίας δημόσιου κλειδιού είναι η κρυπτογράφηση κίνησης εφαρμογών χρησιμοποιώντας σύνδεση Στρώματος Ασφαλούς Υποδοχέα ( Secure Socket Layer (SSL)) ή Μεταφοράς Στρώματος Ασφάλειας (Transport Layer Security (TLS)). Για παράδειγμα, η διαμόρφωση του Apache ώστε να παρέχει HTTPS, το πρωτόκολλο HTTP πάνω από SSL. Αυτό επιτρέπει έναν τρόπο να κρυπτογραφήσετε κίνηση χρησιμοποιώντας ένα πρωτόκολλο το οποίο δεν παρέχει κρυπτογράφηση από μόνο του.

Το Certificate είναι μια μέθοδος που χρησιμοποιείται για να διανέμει ένα δημόσιο κλειδί και άλλες πληροφορίες για έναν διακομιστή και τον οργανισμό ο οποίος είναι υπεύθυνος για αυτόν. Τα πιστοποιητικά μπορεί να είναι ψηφιακά υπογεγραμμένα από μια Αρχή Πιστοποίησης ή ΑΠ. Η ΑΠ είναι ένας αξιόπιστος τρίτος που έχει επιβεβαιώσει ότι οι πληροφορίες που περιέχονται στο πιστοποιητικό είναι ακριβείς.

Είδη Πιστοποιητικών

Για να στήσετε έναν ασφαλή διακομιστή χρησιμοποιώντας κρυπτογράφηση δημόσιου-κλειδιού, στις περισσότερες περιπτώσεις, στέλνετε το αίτημα πιστοποιητικού (συμπεριλαμβανομένου και του δημόσιου κλειδιού σας), απόδειξη την ταυτότητας της εταιρίας σας, και πληρωμή σε μια ΑΠ. Η ΑΠ επαληθεύει το αίτημα πιστοποιητικού και την ταυτότητά σας, και μετά σας στέλνει ένα πιστοποιητικό για τον ασφαλή διακομιστή σας. Εναλλακτικά, μπορείτε να δημιουργήσετε το δικό σας υπογεγραμμένο από εσάς πιστοποιητικό.

[Σημείωση]

Σημειώστε, ότι πιστοποιητικά υπογεγραμμένα από εσάς δε θα πρέπει να χρησιμοποιούνται στα περισσότερα περιβάλλοντα παραγωγής.

Συνεχίζοντας το παράδειγμα HTTPS, ένα πιστοποιητικό υπογεγραμμένο από ΑΠ παρέχει δύο σημαντικές δυνατότητες που ένα πιστοποιητικό υπογεγραμμένο από εσάς δεν παρέχει:

  • Οι φυλλομετρητές (συνήθως) αναγνωρίζουν αυτόματα το πιστοποιητικό και επιτρέπουν μια ασφαλή σύνδεση να δημιουργηθεί χωρίς να προτρέψει το χρήστη.

  • Όταν μια ΑΠ εκδίδει ένα υπογεγραμμένο πιστοποιητικό, εγγυάται την ταυτότητα του οργανισμού ο οποίος παρέχει τη σελίδα ιστού στο φυλλομετρητή.

Οι περισσότεροι φυλλομετρητές Ιστού, και υπολογιστές, οι οποίοι υποστηρίζουν SSL έχουν λίστα ΑΠ των οποίων τα πιστοποιητικά αποδέχονται αυτόματα. Εάν ένας φυλλομετρητής αντιμετωπίσει ένα πιστοποιητικό του οποίου η εξουσιοδοτημένη ΑΠ δεν είναι στη λίστα, ο φυλλομετρητής ζητάει από τον χρήστη να δεχθεί ή να απορρίψει την σύνδεση. Επίσης, άλλες εφαρμογές μπορούν να παράγουν ένα μήνυμα σφάλματος όταν χρησιμοποιούν ένα πιστοποιητικό υπογεγραμμένο από εσάς.

Η διαδικασία του να πάρετε ένα πιστοποιητικό από μια ΑΠ είναι σχετικά εύκολο. Μια γρήγορη επισκόπηση είναι όπως ακολούθως:

  1. Δημιουργήστε ένα ζευγάρι ιδιωτικού και δημόσιου κλειδιού κρυπτογράφησης.

  2. Δημιουργήστε ένα αίτημα πιστοποιητικού βασισμένο στο δημόσιο κλειδί. Το αίτημα πιστοποιητικού περιέχει πληροφορίες για το διακομιστή σας και την εταιρία που τον στεγάζει.

  3. Στείλτε το αίτημα πιστοποιητικού, μαζί με αρχεία που αποδεικνύουν την ταυτότητά σας, σε μια ΑΠ. Δεν μπορούμε να σας πούμε πια αρχή πιστοποίησης να διαλέξετε. Η απόφασή σας μπορεί να βασίζεται σε παλαιότερη εμπειρία, ή σε εμπειρίες των φίλων ή συναδέλφων σας, ή αμιγώς σε οικονομικούς παράγοντες.

    Όταν έχετε αποφασίσει σε μια ΑΠ, πρέπει να ακολουθήσετε τις οδηγίες που παρέχουν για το πως να αποκτήσετε ένα πιστοποιητικό από αυτούς.

  4. Όταν η ΑΠ έχει βεβαιωθεί ότι είστε αυτός που ισχυρίζεστε, σας στέλνουν ένα ψηφιακό πιστοποιητικό.

  5. Εγκαταστήστε το πιστοποιητικό σας στον ασφαλή διακομιστή σας, και διαμορφώστε τις κατάλληλες εφαρμογές για να χρησιμοποιήσετε το πιστοποιητικό.

Παραγωγή ενός Αιτήματος Υπογραφής Πιστοποιητικού (ΑΥΠ)

Είτε πάρετε ένα πιστοποιητικό από μια ΑΠ είτε παράγετε το δικό σας υπογεγραμμένο από εσάς, το πρώτο βήμα είναι η παραγωγή κλειδιού.

Εάν το πιστοποιητικό θα χρησιμοποιηθεί σε δαίμονες υπηρεσιών, όπως τα Apache, Postfix, Dovecot, κλπ, ένα κλειδί χωρίς κωδική φράση είναι συνήθως κατάλληλο. Η μη χρησιμοποίηση κωδικής φράσης επιτρέπει στις υπηρεσίες να εκκινούν χωρίς χειροκίνητη παρέμβαση, συνήθως ο προτιμώμενος τρόπος να ξεκινήσει ένας δαίμονας.

Αυτή η ενότητα θα καλύψει την παραγωγή κλειδιού με κωδική φράση, και ενός χωρίς. Το κλειδί χωρίς κωδική φράση θα χρησιμοποιηθεί ύστερα για την παραγωγή ενός πιστοποιητικού το οποίο μπορεί να χρησιμοποιηθεί σε ποικίλους δαίμονες υπηρεσιών.

[Προειδοποίηση]

Το να εκτελείτε την ασφαλή υπηρεσία σας χωρίς κωδική φράση είναι βολικό επειδή δεν χρειάζεται να εισάγετε την κωδική φράση κάθε φορά που εκκινείτε την ασφαλή υπηρεσία σας. Αλλά δεν είναι ασφαλές και η έκθεση κλειδιού σημαίνει την έκθεση του διακομιστή επίσης.

Για να παράγετε ένα κλειδί για το Αίτημα Υπογραφής Πιστοποιητικού (ΑΥΠ) εκτελέστε την ακόλουθη εντολή από ένα τερματικό εντολών:

openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.....................++++++
.................++++++
unable to write 'random state'
e is 65537 (0x10001)
Enter pass phrase for server.key:

Τώρα μπορείτε να εισάγετε την κωδική φράση. Για μεγαλύτερη ασφάλεια, πρέπει να περιέχει τουλάχιστον οχτώ χαρακτήρες. Το ελάχιστο μέγεθος όταν προσδιορίζετε -des3 είναι τέσσερις χαρακτήρες. Θα πρέπει να περιλαμβάνει αριθμούς και/ή σημεία στίξης και όχι να είναι μια λέξη σε ένα λεξικό. Επίσης θυμηθείτε ότι η κωδική σας φράση είναι ευαίσθητη στα κεφαλαία-μικρά γράμματα.

Επαναπληκτρολογείστε την κωδική φράση για να την επαληθεύσετε. Όταν την έχετε επαναπληκτρολογήσει σωστά, το κλειδί διακομιστή παράγεται και αποθηκεύεται στο αρχείο server.key.

Τώρα δημιουργήστε το μη ασφαλές κλειδί, αυτό χωρίς κωδική φράση, και ανακατέψτε τα ονόματα κλειδιών:

openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure
mv server.key.insecure server.key

Το μη ασφαλές κλειδί έχει τώρα όνομα server.key, και μπορείτε να χρησιμοποιήσετε αυτό το αρχείο για να παράγετε ένα ΑΥΠ χωρίς κωδική φράση.

Για να δημιουργήσετε ένα ΑΥΠ, εκτελέστε την ακόλουθη εντολή σε ένα τερματικό εντολών:

openssl req -new -key server.key -out server.csr

It will prompt you enter the passphrase. If you enter the correct passphrase, it will prompt you to enter Company Name, Site Name, Email Id, etc. Once you enter all these details, your CSR will be created and it will be stored in the server.csr file.

Μπορείτε τώρα να υποβάλετε αυτό το αρχείο ΑΥΠ σε μια ΑΠ για διεργασία. Η ΑΠ θα χρησιμοποιήσει αυτό ΑΥΠ αρχείο κα θα εκδώσει ένα πιστοποιητικό. Αφ' ετέρου, μπορείτε να δημιουργήσετε ένα πιστοποιητικό υπογεγραμμένο από εσάς με αυτό το ΑΥΠ.

Δημιουργία ενός Πιστοποιητικού Υπογεγραμμένου από εσάς

Για να δημιουργήσετε ένα πιστοποιητικό υπογεγραμμένο από εσάς, εκτελέστε την ακόλουθη εντολή σε ένα τερματικό εντολών:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Η παραπάνω εντολή θα σας ζητήσει να εισάγετε την κωδική φράση. Όταν εισάγετε τη σωστή κωδική φράση, το πιστοποιητικό σας θα δημιουργηθεί και θα αποθηκευτεί στο αρχείο server.crt.

[Προειδοποίηση]

Αν ο ασφαλής διακομιστής σας θα χρησιμοποιηθεί σε περιβάλλον παραγωγής, πιθανόν χρειάζεστε ένα πιστοποιητικό υπογεγραμμένο από μια ΑΠ. Δε συστήνεται να χρησιμοποιήσετε ένα πιστοποιητικό υπογεγραμμένο από εσάς.

Εγκατάσταση του Πιστοποιητικού

Μπορείτε να εγκαταστήσετε το αρχείο κλειδιού server.key και το αρχείο πιστοποιητικού server.crt, ή το αρχείο πιστοποιητικού που έχει παραχθεί από την ΑΠ, εκτελώντας τις ακόλουθες εντολές σε ένα τερματικό εντολών:

sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private

Τώρα απλώς διαμορφώστε τις εφαρμογές, με την ικανότητα χρήσης κρυπτογράφησης δημόσιου-κλειδιού, για να χρησιμοποιήσουν τα αρχεία πιστοποιητικού και κλειδιού. Για παράδειγμα, ο Apache μπορεί να παρέχει HTTPS, το Dovecot μπορεί να παρέχει IMAPS και POP3S, κ.λ.π.

Αρχή Πιστοποίησης

Εάν οι υπηρεσίες του δικτύου σας απαιτούν παραπάνω από μερικά πιστοποιητικά υπογεγραμμένα από εσάς ίσως αξίζει τον κόπο να στήσετε μια εσωτερική Αρχή Πιστοποίησης (ΑΠ). Χρησιμοποιώντας πιστοποιητικά υπογεγραμμένα από τη δική σας ΑΠ, επιτρέπει τις διάφορες υπηρεσίες που χρησιμοποιούν τα πιστοποιητικά να εμπιστεύονται εύκολα άλλες υπηρεσίες που χρησιμοποιούν πιστοποιητικά που έχουν παραχθεί από την ίδια ΑΠ>

  1. Πρώτον, δημιουργήστε τους καταλόγους που θα κρατήσουν τα πιστοποιητικά ΑΠ και τα σχετικά αρχεία:

    sudo mkdir /etc/ssl/CA
    sudo mkdir /etc/ssl/newcerts
    
  2. Η ΑΠ χρειάζεται μερικά επιπρόσθετα αρχεία για να λειτουργήσει, ένα για να παρακολουθεί τους τελευταίους σειριακούς αριθμούς που χρησιμοποιήθηκαν από την ΑΠ, κάθε πιστοποιητικό πρέπει να έχει ένα μοναδικό σειριακό αριθμό, και ένα άλλο αρχείο να καταγράφει ποια πιστοποιητικά έχουν εκδοθεί:

    sudo sh -c "echo '01' > /etc/ssl/CA/serial"
    sudo touch /etc/ssl/CA/index.txt
    
  3. Το τρίτο αρχείο είναι ένα αρχείο διαμόρφωσης της ΑΠ. Παρόλο που δεν είναι αυστηρώς αναγκαίο, είναι πολύ βολικό όταν εκδίδονται πολλαπλά πιστοποιητικά. Επεξεργαστείτε το /etc/ssl/openssl.cnf, και το [ CA_default ] αλλάξτε τα:

    dir             = /etc/ssl/             # Όπου όλα διατηρούνται
    database        = $dir/CA/index.txt     # βάση δεδομένων αρχείου ευρετηρίου.
    certificate     = $dir/certs/cacert.pem # Το πιστοποιητικό ΑΠ
    serial          = $dir/CA/serial        # Ο τρέχων σειριακός αριθμός
    private_key     = $dir/private/cakey.pem# Το ιδιωτικό κλειδί
    
  4. Μετά, δημιουργήστε το υπογεγραμμένο από εσάς πιστοποιητικό βάσης:

    openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
    

    Ύστερα θα σας ζητηθεί να εισάγετε λεπτομέρειες σχετικές με το πιστοποιητικό.

  5. Τώρα εγκαταστήστε το πιστοποιητικό και το κλειδί βάσης:

    sudo mv cakey.pem /etc/ssl/private/
    sudo mv cacert.pem /etc/ssl/certs/
    
  6. Είστε τώρα έτοιμοι να αρχίσετε να υπογράφετε πιστοποιητικά. Το πρώτο αντικείμενο που χρειάζεστε είναι ένα Αίτημα Υπογραφής Πιστοποιητικού (ΑΥΠ), δείτε “Παραγωγή ενός Αιτήματος Υπογραφής Πιστοποιητικού (ΑΥΠ)” για λεπτομέρειες. Όταν έχετε ένα ΑΥΠ, εισάγετε τα ακόλουθα για να παράγετε ένα πιστοποιητικό υπογεγραμμένο από την ΑΠ:

    sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf
    

    Αφού εισάγετε τον κωδικό για το κλειδί ΑΠ, θα σας ζητηθεί να υπογράψετε το πιστοποιητικό, και ξανά να παραδώσετε το νέο πιστοποιητικό. Ύστερα θα πρέπει να δείτε ένα σχετικά μεγάλο όγκο εξόδου σχετικό με τη δημιουργία του πιστοποιητικού.

  7. There should now be a new file, /etc/ssl/newcerts/01.pem, containing the same output. Copy and paste everything beginning with the line: -----BEGIN CERTIFICATE----- and continuing through the line: ----END CERTIFICATE----- lines to a file named after the hostname of the server where the certificate will be installed. For example mail.example.com.crt, is a nice descriptive name.

    Μεταγενέστερα πιστοποιητικά θα ονομαστούν 02.pem, 03.pem, κλπ.

    [Σημείωση]

    Αντικαταστήστε το mail.example.com.crt με το δικό σας περιγραφικό όνομα.

  8. Τέλος, αντιγράψτε το καινούριο πιστοποιητικό στον κεντρικό υπολογιστή που το χρειάζεται, και διαμορφώστε τις κατάλληλες εφαρμογές για να το χρησιμοποιήσουν. Η εξορισμού τοποθεσία για να εγκαταστήσετε πιστοποιητικά είναι η /etc/ssl/certs. Αυτό επιτρέπει σε πολλαπλές υπηρεσίες να χρησιμοποιούν τα ίδια πιστοποιητικά χωρίς ιδιαίτερα περίπλοκες άδειες αρχείων.

    Για εφαρμογές που μπορούν να διαμορφωθούν για να χρησιμοποιήσουν ένα πιστοποιητικό ΑΠ, θα πρέπει επίσης να αντιγράψετε το αρχείο the /etc/ssl/certs/cacert.pem στον κατάλογο /etc/ssl/certs/ σε κάθε διακομιστή.

Αναφορές

  • Για πιο λεπτομερείς οδηγίες για τη χρήση κρυπτογράφησης δείτε το SSL Certificates HOWTO από το tlpd.org

  • Η Σελίδα The PKI περιέχει μια λίστα αρχών Πιστοποίησης.

  • Η σελίδα της Wikipedia HTTPS περιέχει περισσότερες πληροφορίες σχετικά με το HTTPS.

  • Για περισσότερες πληροφορίες για το OpenSSL δείτε την Κεντρική Σελίδα OpenSSL.

  • Επίσης, το Network Security with OpenSSL του O'Reilly είναι μια καλή σε βάθος αναφορά.