Hits : 2297

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)
    • MD5
    • SHA1
  • Private/Public Key 
    • RSA 
    • DSA 
    • ECC (Elliptic Curve)

Υπάρχουν 4 κατηγορίες

  • ecb 
  • cbc 
  • cfb 
  • ofb

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


  1. Create a new Virtual Host

<VirtualHost 127.0.0.13:80>
        DocumentRoot    /www/www.ebal.gr
        ServerName      www.ebal.gr
</VirtualHost>


  1. 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>


  1. 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>


  1. 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