
Se provi a seguire l'articolo su come installare Apache con SSL di cui abbiamo discusso tempo fa, incontrerai un problema durante "make" a causa della compatibilità della versione tra Apache 2.4.4 e le utility APR (Apache Portable Runtime Library) che arriva con CentOS 6.
In questo articolo abbiamo spiegato come risolvere il problema per far funzionare l'ultimo Apache su CentOS o RedHat.
Assicurati di avere installato gcc e openssl-devel.
# yum install gcc # yum install openssl-devel
Hai anche bisogno dell'APR "Apache Portable Runtime Library" per installare Apache dal sorgente.
Avrai già installato il pacchetto "apr" e "apr-util". Installa i pacchetti apr-devel e apr-util-devel.
# yum install apr-devel # yum install apr-util-devel
Nota:nel nostro caso (a causa dei problemi di compatibilità delle versioni), li scaricheremo e li installeremo manualmente in un secondo momento. Ma per ora seguiamo il flusso e vediamo cosa succede quando provi a farlo in questo modo.
Scarica Apache
Scarica Apache da httpd.apache.org. L'attuale versione stabile è la 2.4.2.
Una volta ottenuto l'URL diretto per scaricare l'ultima versione stabile di Apache, usa wget come mostrato di seguito per scaricarlo direttamente sul tuo server.
cd /usr/src wget http://mirror.nyi.net/apache//httpd/httpd-2.4.2.tar.gz tar xvfz httpd-2.4.2.tar.gz
Installa Apache con SSL/TLS
Visualizza tutte le opzioni di installazione e configurazione disponibili di Apache come mostrato di seguito.
cd httpd-2.4.2 ./configure --help
Per installare un modulo Apache, in genere diresti –enable-{module-name}. Ad esempio, per installare SSL con Apache, è –enable-ssl. Per installare il modulo ldap, è –enable-ldap.
Per disinstallare qualsiasi modulo predefinito fornito con Apache, in genere dovresti dire –disable-{module-name}. Ad esempio, per disabilitare l'autenticazione di base in Apache, è –disable-auth-basic
In questo esempio, installeremo Apache con tutti i moduli predefiniti, con l'aggiunta di –enable-ssl (per installare mod_ssl per il supporto SSL) e –enable-so, che aiuta a caricare i moduli in Apache durante il runtime tramite Dynamic Shared Meccanismo dell'oggetto (DSO), piuttosto che richiedere una ricompilazione.
./configure --enable-ssl --enable-so make make install
Nota:per impostazione predefinita quanto sopra installa Apache in /usr/local/apache2. Se desideri modificare questa posizione, usa l'opzione –prefix in ./configure.
Correzione dei messaggi di errore dell'utility APR
Potresti non aver riscontrato questo problema durante l'installazione della versione precedente di Apache, come abbiamo discusso tempo fa.
Quando esegui "make", potresti ottenere "rotatelogs.c:(.text+0x5ed):riferimento non definito a `apr_file_link' " messaggio di errore se lo stai facendo su CentOS 6.2 come mostrato di seguito.
# make rotatelogs.c:298: warning: implicit declaration of function âapr_file_linkâ /usr/lib64/apr-1/build/libtool --silent --mode=link gcc -std=gnu99 -pthread -o rotatelogs rotatelogs.lo /usr/lib64/libaprutil-1.la -ldb-4.7 -lexpat -ldb-4.7 /usr/lib64/libapr-1.la -lpthread rotatelogs.o: In function `post_rotate': rotatelogs.c:(.text+0x5ed): undefined reference to `apr_file_link' collect2: ld returned 1 exit status make[2]: *** [rotatelogs] Error 1 make[2]: Leaving directory `/usr/src/httpd-2.4.2/support' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/src/httpd-2.4.2/support' make: *** [all-recursive] Error 1
Questo perché su CentOS 6, l'ultima versione APR disponibile tramite l'installazione di yum è 1.3.9 come mostrato di seguito.
# rpm -qa apr* apr-1.3.9-3.el6_1.2.x86_64 apr-util-1.3.9-3.el6_0.1.x86_64
Tuttavia, Apache 2.4.2 necessita dell'ultima versione di APR (che attualmente è la 1.4.6).
Quindi, vai alla pagina di download di APR e scarica sia apr che apr-util.
cd /usr/src wget http://mirror.atlanticmetro.net/apache//apr/apr-1.4.6.tar.gz wget http://mirror.atlanticmetro.net/apache//apr/apr-util-1.4.1.tar.gz tar xvfz apr-1.4.6.tar.gz tar xvfz apr-util-1.4.1.tar.gz
Ora, dovresti posizionare questa nuova versione delle directory apr e apr-util (senza il nome della versione nella directory) nella directory "srclib" situata nella directory httpd-2.4.2 creata quando hai decompresso il software apache scaricato.
Nel mio esempio, ho scaricato httpd-2.4.2.tar.gz e l'ho decompresso in /usr/src. Quindi, ho bisogno di inserire l'ultimo apr e apr-util in questa directory.
mv apr-1.4.6 /usr/src/httpd-2.4.2/srclib/apr mv apr-util-1.4.1 /usr/src/httpd-2.4.2/srclib/apr-util
Al termine, è necessario configurarlo e farlo di nuovo. Se esegui ./configure –help, vedrai le seguenti opzioni relative ad APR
# cd /usr/src/httpd-2.4.2 # ./configure --help --with-included-apr Use bundled copies of APR/APR-Util --with-apr=PATH prefix for installed APR or the full path to apr-config --with-apr-util=PATH prefix for installed APU or the full path to apu-config
Se decidi di installare apr-1.4.6 e apr-util-1.4.1 sul tuo sistema, devi usare “–with-apr” e “–with-apr-util” e fornire il percorso in cui li hai installati utilità.
In questo esempio, non l'abbiamo fatto. cioè non abbiamo installato apr e apr-util che abbiamo scaricato. Invece li abbiamo inseriti in httpd-2.4.2/srclib/apr-util. Quindi, dovremmo usare "–with-included-apr" in ./configure che utilizzerà questi apr e apr-util solo per la compilazione e l'installazione di apache.
Quindi, rifacciamo ./configure (usando –with-included-apr), eseguiamo e facciamo l'installazione come mostrato di seguito.
./configure --enable-ssl --enable-so --with-included-apr make make install
Ora, make non darà più il messaggio di errore "rotatelogs.c:(.text+0x5ed):undefined reference to `apr_file_link".
Abilita SSL in httpd.conf
Il file di configurazione di Apache httpd.conf si trova in /usr/local/apache2/conf.
Decommentare la riga httpd-ssl.conf Include e la riga LoadModule ssl_module nel file /usr/local/apache2/conf/httpd.conf.
# vi /usr/local/apache2/conf/httpd.conf LoadModule ssl_module modules/mod_ssl.so Include conf/extra/httpd-ssl.conf
Visualizza httpd-ssl.conf per rivedere tutte le configurazioni SSL predefinite. Nella maggior parte dei casi, non è necessario modificare nulla in questo file.
# vi /usr/local/apache2/conf/extra/httpd-ssl.conf
Il certificato SSL e la chiave sono necessari prima di avviare Apache. I file server.crt e server.key menzionati in httpd-ssl.conf devono essere creati prima di andare avanti.
# cd /usr/local/apache2/conf/extra # egrep 'server.crt|server.key' httpd-ssl.conf SSLCertificateFile "/usr/local/apache2/conf/server.crt" SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
Crea il file server.crt e server.key
Innanzitutto, genera il server.key utilizzando openssl.
# cd /usr/src # openssl genrsa -des3 -out server.key 1024
Il comando precedente chiederà la password. Assicurati di ricordare questa password. Ne hai bisogno per avviare il tuo Apache in un secondo momento.
Quindi, genera un file di richiesta di certificato (server.csr) utilizzando il file server.key sopra.
# openssl req -new -key server.key -out server.csr
Infine, genera un certificato SSL autofirmato (server.crt) utilizzando il file server.key e server.csr sopra.
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Dopo aver completato i passaggi precedenti, vedrai i seguenti tre file in /usr/src
# ls server* server.crt server.csr server.key
Copia il file server.key e server.crt nella posizione della directory di configurazione di Apache appropriata.
cp server.key /usr/local/apache2/conf/ cp server.crt /usr/local/apache2/conf/
Avvia l'Apache
Se ricevi il seguente messaggio di errore, assicurati di decommentare la riga mostrata di seguito in httpd.conf
# /usr/local/apache2/bin/apachectl start AH00526: Syntax error on line 51 of /usr/local/apache2/conf/extra/httpd-ssl.conf: Invalid command 'SSLCipherSuite', perhaps misspelled or defined by a module not included in the server configuration # vi /usr/local/apache2/conf/httpd.conf LoadModule ssl_module modules/mod_ssl.so
Se ricevi il seguente messaggio di errore, assicurati di decommentare la riga mostrata di seguito in httpd.conf
# /usr/local/apache2/bin/apachectl start AH00526: Syntax error on line 76 of /usr/local/apache2/conf/extra/httpd-ssl.conf: SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?). # vi /usr/local/apache2/conf/httpd.conf LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Infine, questo ti chiederà di inserire la password per la tua chiave privata prima di avviare l'Apache.
# /usr/local/apache2/bin/apachectl start Apache/2.4.2 mod_ssl (Pass Phrase Dialog) Some of your private key files are encrypted for security reasons. In order to read them you have to provide the pass phrases. Server www.example.com:443 (RSA) Enter pass phrase: OK: Pass Phrase Dialog successful.
Verifica che il processo httpd di Apache sia in esecuzione in background
# ps -ef | grep http root 29529 1 0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start daemon 29530 29529 0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start daemon 29531 29529 0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start daemon 29532 29529 0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start root 29616 18260 0 13:09 pts/0 00:00:00 grep http
Per fermare apache usa apachectl stop.
# /usr/local/apache2/bin/apachectl stop
Usa httpd -l per visualizzare tutti i moduli che sono compilati all'interno del demone httpd di Apache.
# /usr/local/apache2/bin/httpd -l Compiled in modules: core.c mod_so.c http_core.c event.c
Per impostazione predefinita Apache SSL viene eseguito sulla porta 443. Apri un browser web e verifica di poter accedere al tuo Apache utilizzando https://{your-ip-address}