Hits :
3644
Web Server Encryption:: Mini How To
Strong Encryption using the Secure Sockets Layer
Όταν περιηγούμαστε σε ένα ιστότοπο μέσω του διαδικτύου, η πληροφορίες που ανταλάσσουμε
με τον διακομιστή είναι απλό κείμενο. Με αυτό τον τρόπο μπορεί κάποιος με κακόβουλο
σκοπό να καταγράφει και να επιβλέπει την ανταλλαγή των δεδομένων/πληροφοριών από τον
υπολογιστή μας προς τον διακομιστή του ιστότοπου και αντίστροφα.
Μία από τις λύσεις είναι να προσθέσουμε ένα επίπεδο αυθεντικοποίησης ώστε ο διακομιστής του
ιστότοπου να μας πιστοποιεί πριν ξεκινήσουμε την ανταλλαγή των δεδομένων/πληροφοριών. Αλλά με
αυτό το μέτρο ΔΕΝ έχουμε αλλάξει τον τρόπο της επικοινωνίας μας με τον διακομιστή. Και πάλι οι
πληροφορίες που ανταλάσσουμε είναι της μορφής ενός απλού κειμένου.
Η προφανής λύση είναι να κρυπτογραφήσουμε την επικοινωνία μας ώστε να μην είναι ένα απλό κείμενο.
Η λύση είναι ο διακομιστής του ιστότοπου να κάνει χρήση ενός επιπλέον επιπέδου στην επικοινωνία
μέσω του διαδικτύου ώστε να ανταλάσει πληροφορίες προς εμάς και εμείς προς αυτό οι οποίες να είναι
πλέον κρυπτογραφημένες.
Το πρόβλημα εδώ είναι το εξής: Μπορεί κάποιος να αποποιηθεί την ταυτότητα μας κατά την κρυπτογραφημένη
σύνδεσή μας με τον διακομιστή του ιστότοπου και με αυτό τον τρόπο και να αυθεντικοποιηθεί με τον ιστότοπο
και πλέον να έχει και αυτός πρόσβαση μέσω της κρυπτογραφημένης επικοινωνίας μας με τον διακομιστή του
ιστότοπου.
Τότε χρειάζεται να προσθέσουμε ένα ακόμα στοιχείο κατά την επικοινωνίας μας με τον διακομιστή.
Την αμφίδρομη κρυπτογράφηση της επικοινωνίας μας με τον διακομιστή του ιστότοπου που θέλουμε να
περιηγηθούμε. Αυτό γίνεται με την δημιουργία ενός ξεχωριστού κλειδιού με το οποίο μπορούμε να
κρυπτογραφήσουμε την επικοινωνίας μας ΠΡΟΣ τον διακομιστή και παράλληλα με το ίδιο κλειδί να
μας πιστοποιήσει το διακομιστής. Μπορούμε ως επιπλέον μέτρο ασφάλειας να προσθέσουμε και ένα
ακόμα επίπεδο αυθεντικοποίησης μέσω ΟΝΟΜΑ_ΧΡΗΣΤΗ και ΣΥΝΘΗΜΑΤΙΚΟ_ΧΡΗΣΤΗ.
Η επικοινωνίας μας τότε θα είναι αμφίδρομα κρυπτογραφημένη και η αυθεντικοποίηση μας θα γίνεται
με 2 τρόπους:
α. Με το προσωπικό κλειδί μας
β. Με την εισαγωγή προσωπικών διαπιστεύσεων
top
Κρυπτογραφία
Αλγόριθμοι
- Ciphers
- DES
- DES3
- AES
- IDEA
- RC4
- RC5
- Message Digest commands (Hash Algorithms)
- Private/Public Key
- RSA
- DSA
- ECC (Elliptic Curve)
Υπάρχουν 4 κατηγορίες
top
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 που φτιάξαμε και το έχουμε ήδη
υπογράψει με τη έμπιστη πηγή.
top
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
top
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
with Client Certificate Authentication
<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>
top