Hits :
Web Server Encryption:: Mini How To
Contents
Strong Encryption using the Secure Sockets Layer
με τον διακομιστή είναι απλό κείμενο. Με αυτό τον τρόπο μπορεί κάποιος με κακόβουλο
σκοπό να καταγράφει και να επιβλέπει την ανταλλαγή των δεδομένων/πληροφοριών από τον
υπολογιστή μας προς τον διακομιστή του ιστότοπου και αντίστροφα.
ιστότοπου να μας πιστοποιεί πριν ξεκινήσουμε την ανταλλαγή των δεδομένων/πληροφοριών. Αλλά με
αυτό το μέτρο ΔΕΝ έχουμε αλλάξει τον τρόπο της επικοινωνίας μας με τον διακομιστή. Και πάλι οι
πληροφορίες που ανταλάσσουμε είναι της μορφής ενός απλού κειμένου.
Η προφανής λύση είναι να κρυπτογραφήσουμε την επικοινωνία μας ώστε να μην είναι ένα απλό κείμενο.
Η λύση είναι ο διακομιστής του ιστότοπου να κάνει χρήση ενός επιπλέον επιπέδου στην επικοινωνία
μέσω του διαδικτύου ώστε να ανταλάσει πληροφορίες προς εμάς και εμείς προς αυτό οι οποίες να είναι
πλέον κρυπτογραφημένες.
Το πρόβλημα εδώ είναι το εξής: Μπορεί κάποιος να αποποιηθεί την ταυτότητα μας κατά την κρυπτογραφημένη
σύνδεσή μας με τον διακομιστή του ιστότοπου και με αυτό τον τρόπο και να αυθεντικοποιηθεί με τον ιστότοπο
και πλέον να έχει και αυτός πρόσβαση μέσω της κρυπτογραφημένης επικοινωνίας μας με τον διακομιστή του
ιστότοπου.
Τότε χρειάζεται να προσθέσουμε ένα ακόμα στοιχείο κατά την επικοινωνίας μας με τον διακομιστή.
Την αμφίδρομη κρυπτογράφηση της επικοινωνίας μας με τον διακομιστή του ιστότοπου που θέλουμε να
περιηγηθούμε. Αυτό γίνεται με την δημιουργία ενός ξεχωριστού κλειδιού με το οποίο μπορούμε να
κρυπτογραφήσουμε την επικοινωνίας μας ΠΡΟΣ τον διακομιστή και παράλληλα με το ίδιο κλειδί να
μας πιστοποιήσει το διακομιστής. Μπορούμε ως επιπλέον μέτρο ασφάλειας να προσθέσουμε και ένα
ακόμα επίπεδο αυθεντικοποίησης μέσω ΟΝΟΜΑ_ΧΡΗΣΤΗ και ΣΥΝΘΗΜΑΤΙΚΟ_ΧΡΗΣΤΗ.
Η επικοινωνίας μας τότε θα είναι αμφίδρομα κρυπτογραφημένη και η αυθεντικοποίηση μας θα γίνεται
με 2 τρόπους:
α. Με το προσωπικό κλειδί μας
β. Με την εισαγωγή προσωπικών διαπιστεύσεων
Κρυπτογραφία
Αλγόριθμοι
- Ciphers
- DES
- DES3
- AES
- IDEA
- RC4
- RC5
- Message Digest commands (Hash Algorithms)
- MD5
- SHA1
- Private/Public Key
- RSA
- DSA
- ECC (Elliptic Curve)
Υπάρχουν 4 κατηγορίες
- ecb
- cbc
- cfb
- ofb
Certificates
Για να "προστατεύσουμε" τα κλειδιά μας καθώς και το site μας χρειάζεται
δημιουργήσουμε μία έμπιστη πηγή με την οποία θα υπογράψουμε τα κλειδιά μας.
Για αυτό λοιπόν παράγουμε μία έμπιστη πηγή:
Έπειτα χρειάζεται να δημιουργήσουμε ένα πιστοποιητικό για το site μας
και στην συνέχεια να το υπογράψουμε μέσω της έμπιστης πηγή μας
Τι πρέπει να κάνουμε:
a. key.pem ή name.key
Παράγουμε ένα private κλειδί:
Το κλειδί έχει 2 ορίσματα:
β. Το μέγεθος (σε bit) που θέλουμε
b. key.csr
Παράγουμε ένα Certificate Signing Request με βάση το Private Key που δημιουργήσαμε
c. x509 ή key.crt
Παράγουμε ένα x509 Certification με βάση το csr που έχουμε φτιάξει
http://tools.ietf.org/html/rfc4158
d. pkcs12 ή key.p12
Παράγουμε ένα client site certificate με βάση το crt που φτιάξαμε και το έχουμε ήδη
υπογράψει με τη έμπιστη πηγή.
Script To Create Keys
#!/bin/bash clear # Create RSA echo 'RSA' echo mkdir -pv /www/ca/ cd /www/ca/ # Certificate Authority # RSA – CA without a password echo echo "Certificate Authority – RSA" echo openssl genrsa -aes256 -out ca.rsa.pem 4096 openssl rsa -in ca.rsa.pem -out ca.rsa.key openssl req -new -x509 -days 1825 -key ca.rsa.key -out ca.rsa.crt echo # Country Name (2 letter code) [AU]:GR # State or Province Name (full name) [Some-State]:Athens # Locality Name (eg, city) []:Aigaleo # Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ebalaskas.Gr # Organizational Unit Name (eg, section) []:Web Apps # Common Name (eg, YOUR name) []:Evaggelos Balaskas # Email Address []:ebalaskas@ebalaskas.gr # Server Site Certificate – RSA echo echo "Server Site Certificate – RSA" echo openssl genrsa -aes256 -out ebal.pem 4096 openssl rsa -in ebal.pem -out ebal.key openssl req -new -key ebal.key -out ebal.csr echo 'ΠΡΟΣΟΧΗ: ΤΟ Common Name ΠΡΕΠΕΙ ΝΑ ΤΟ ΟΝΟΜΑ ΤΟΥ site' openssl x509 -req -days 1825 -in ebal.csr -out ebal.crt \ -sha1 -CA ca.rsa.crt -CAkey ca.rsa.key -CAcreateserial # Country Name (2 letter code) [AU]:GR # State or Province Name (full name) [Some-State]:Athens # Locality Name (eg, city) []:Aigaleo # Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ebalaskas.Gr # Organizational Unit Name (eg, section) []:Web Apps # Common Name (eg, YOUR name) []: www.ebal.gr # Email Address []:ebalaskas@ebalaskas.gr # Server Site Client Certificate echo echo "Server Site Client Certificate – RSA" echo openssl pkcs12 -export -in ebal.crt -inkey ebal.key \ -name "www.ebal.gr Certificate Client" -out ebal.p12 # Apache echo echo Apache echo /usr/local/apache2/bin/htpasswd \ -c /www/ca/.htaccess ebal echo '127.0.0.13 www.ebal.gr' >> /etc/hosts
Web Server
Download and Install Apache Web Server
wget -c http://apache.otenet.gr/dist/httpd/httpd-2.0.63.tar.bz2 tar jxvf httpd-2.0.63.tar.bz2 cd httpd-2.0.63 ./configure --enable-ssl make make install
Για να εκκινήσουμε τον Apache Web Server μας τότε απλά:
/usr/local/apache2/bin/httpd -k start
Μπορούμε μέσω ενός οποιοδήποτε web client/browser να ελέγξουμε ότι παίζει σωστά.
elinks http://localhost
Το αρχείο ρυθμίσεων του Apache Web Server είναι το εξής:
/usr/local/apache2/conf/httpd.conf
Virtual Hosts
- Create a new Virtual Host
<VirtualHost 127.0.0.13:80> DocumentRoot /www/www.ebal.gr ServerName www.ebal.gr </VirtualHost>
- Create a new Virtual Host with Authentication
<VirtualHost 127.0.0.13:80> DocumentRoot /www/www.ebal.gr ServerName www.ebal.gr <Directory /www/www.ebal.gr> AuthType Basic AuthName "Authenication" AuthUserFile /www/ca/.htaccess Require valid-user </Directory> </VirtualHost>
- Create a new Virtual Host with Authentication over SSL
<VirtualHost 127.0.0.13:443> DocumentRoot /www/www.ebal.gr ServerName www.ebal.gr <Directory /www/www.ebal.gr> AuthType Basic AuthName "Authenication" AuthUserFile /www/ca/.htaccess Require valid-user </Directory> SSLEngine on SSLProtocol SSLv3 SSLCertificateFile /www/ca/ebal.crt SSLCertificateKeyFile /www/ca/ebal.key </VirtualHost>
- Create a new Virtual Host with Authentication over SSL
<VirtualHost 127.0.0.13:443> DocumentRoot /www/www.ebal.gr ServerName www.ebal.gr <Directory /www/www.ebal.gr> AuthType Basic AuthName "Authenication" AuthUserFile /www/ca/.htaccess Require valid-user </Directory> SSLEngine on SSLProtocol SSLv3 SSLCertificateFile /www/ca/ebal.crt SSLCertificateKeyFile /www/ca/ebal.key SSLVerifyClient require SSLVerifyDepth 1 SSLCACertificateFile /www/ca/ca.rsa.crt </VirtualHost>