ot Peio Popov(9-09-2005)

reiting (25)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

Uvod

Mod_SSL e interfeis na apache httpd kum openssl. Toi mozhe da se izpolzva kakto za shifrirane na komunikatsiiata mezhdu ueb survura i klienta, udostoveriavane na identichnostta na survura, a taka i za ogranichenie na dostupa do resursite, koito predlaga. V tazi statiia shte se opitam da predstavia osnovite na konfigurirane na tezi ogranicheniia po nachin podoben na tozi, po koito shte budat polzvani na novata mashina na Linux-BG.

Za podruzhkata na mod_ssl

mod_ssl e standartna chast ot vsichki distributsii, koito predlagat apache httpd. Osobenost pri Debian, e che paketut se kazva libapache-mod-ssl. V distributsiiata sushtestvuva i paket apache-ssl, koito predstavliava otdelen ueb survur izpolzvasht proekta apache-ssl.org, koito proekt ne se razrabotva ot godini i e izmesten pochti navsiakude ot mod_ssl, koito se zarezhda kato modul na osnovniia ueb survur.

Vupreki, che niama razliki vuv funktsionalnostta na mod_ssl v 1.3.x i 2.0.x klonovete ima problem, koito pravi nevuzmozhno izprashtaneto na POST zaiavki pri opredeleni iziskvaniia za sertifikatna avtentikatsiia. Tozi problem e poroden ot razlichniia nachin, po koito 2.0.x klona obrabotva POST zaiavkite i e opisan v tozi komentar. Sushtestvuva i pach, koito reshava tozi problem i az sum kompiliral i startiral httpd s nego, no tui kato avtor na pacha e Joe Orton, koito poddurzha paketa httpd v RHEL i Fedora i toi ne go e vklyuchil v distributsiiata, predpolagam, che ima prichini za tova i ne go polzvam, a i ne preporuchvam na vas da go polzvate. SHTe spomena po-dolu konfiguratsiite, koito sa prilozhimi zasega samo za 1.3.x klona, a na tezi, koito polzvat 2.0.x klona, im preporuchvam da slediat changelog-a na httpd paketa na svoiata distributsiia kakto i slednite dva doklada v sistemite za doklad na greshki na:

Tova sa problemi spetsifichni za apache httpd 2.0.x klona, a nie polzvame dokazalata se za stabilna 1.3.h versiia i zatova mozhem da polzvame pulnite vuzmozhnosti na modula.

Nachalna konfiguratsiia

Zapochvame s generiraneto na sertifikat za ueb survura, podpisvaneto mu ot nashata CA i postavianeto im v konfguratsionnite direktorii:

# openssl req -new -sha1 -keyout newkey.pem -out newreq.pem
# ./CA.pl -signreq
# mv newcert.pem /etc/apache/ssl.crt/server.crt
# mv newkey.pem /etc/apache/ssl.key/server.key
# cp Linux-BG-CA/cacert.pem /etc/apache/ssl.crt/cacert.crt

Gorniiat primer shte suzdade chasten klyuch, koito shte bude kriptiran i shte se iska parola pri zarezhdaneto mu ot ueb survura. Purvonachalno taka go biahme napravili, no burzo ni mina i go dekriptirahme. Za da ne bude kriptiran izpolzvaite optsiiata -nodes.

Debian ne vklyuchva nikakva primerna konfiguratsiia na modula i zatova e nuzhno da si ia suzdadem sami. Tova e netipichno za drugite distributsi i az vi suvetvam da poglednete sudurzhanieto na paketa si, primernite konfiguratsionni failove i komentarite v tiah. Za ostanalite distributsii vi suvetvam da ne se otkloniavate ot stoinostite, s koito e konfigurirana obshtata chast na modula po podrazbirane. Dolnite nastroiki sa moe delo i sa praveni kato sum tursel konservativnite i raboteshti sus sigurnost stoinosti, no v deistvitelnost mozhe i da sa vuzmozhni po-dobri resheniia.

Produlzhavame s obshtata konfiguratsiia na mod_ssl, za koiato suzdavame faila /etc/apache/conf.d/mod_ssl.conf.
V nego opisvame obshtite nastroiki na modula, koito shte se opitam da poiasnia kratki komentari:

<IfModule mod_ssl.c>
# Na koi port slusha. Standartno 443ti
Listen 443

# Dopulniteli mime tipove za sertifikatite i za listata s otmenenite sertifikati
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl

SSLPassPhraseDialog builtin

# Ne sum zapoznat sus spetsifikite na Debian i zatova vzimam konservativno i raboteshto sus sigurnost reshenie:
SSLSessionCache dbm:/var/run/ssl_scache
# V RedHat raboti taka:
# SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)

# 5 min. triabva da sa dostatuchno. Tova shte e nuzhno da go promeniate samo, ako saita vi e spetsifichen i/ili vi triabva mnogo da optimizirate.
SSLSessionCacheTimeout 300

# mutex-ite pri nas rabotiat taka:
SSLMutex file:/var/run/ssl_mutex

# Iztochnitsi na sluchaini chisla
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
# Ili mozhe bi shte polzvame:
#SSLRandomSeed startup file:/dev/urandom 512
#SSLRandomSeed connect file:/dev/urandom 512

# ZHurnali
SSLLog /var/log/apache/ssl_engine_log

# Nivo na detail (vuzmozhni sa: none, error, warn, info, trace, debug)
# Sled kato se uverim, che raboti veroiatno shte minem na error samo
SSLLogLevel warn

# Spetsialno vnimanite zasluzhavat potrebitelite na lyubimiia Internet Explorer:
SetEnvIf User-Agent “.*MSIE.*” nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

Konfiguratsionnite direktivi za zaklyucheni mezhdu <IfModule mod_ssl.c> i </IfModule>, za da ne predizvikat greshki, ako modulut ne e zareden.

Spetsifichni nastroiki za virtualniia host

Minavame kum spetsifichnite nastroiki za virtualniia host:

# Ako imame poveche ot edin virtualen ssl host mozhe da polzvame:
# Include /etc/apache/vhosts/*.vhost

<VirtualHost 212.50.10.155:443>

# Tiia si gi znaete
ServerName linux-bg.org
ServerAlias www.linux-bg.org
DocumentRoot /home/path/

# Pusk mashina
SSLEngine on

# Sus stari versii na SSL protokola ne se zanimavame:
SSLProtocol all -SSLv2
# Sushtoto shte e i ako napishem dolnoto, zashtoto TLSv1 i SSLv3 sa sinonimi
# SSLProtocol TLSv1

# Izpolzvani shifri. Te mozhe da se promeniat v &lt:Directory konteineri.
# Tuk dopuskame shifri, koito se podurzhat ot vseki skoroshen brauzur
SSLCipherSuite HIGH:MEDIUM

# Ukazvame kude se namirat sertifikata, klyucha i sertifikata na nasheto CA
SSLCACertificateFile /etc/apache/ssl.crt/cacert.crt
SSLCertificateFile /etc/apache/ssl.crt/server.crt
SSLCertificateKeyFile /etc/apache/ssl.key/server.key

# Ako triabva da vuzstanoviavate veriga na doverie polzvame dolnata direktiva. Drug nachin e prosto da konkatenirame sertifikatite.
# SSLCertificateChainFile /etc/apache/ssl.crt/certchain.crt

# Za direktoriite sudurzhashti mnogo sertifikati se polzva:
# openssl c_rehash /dir

# Listi s otmeneni sertifikati. Tuk se vklyuchvat sertifikati, koito sa kompromentirani, zagubeni ili prosto sme gi izdali, za da si igraem s tiah:
SSLCARevocationFile /etc/apache/ssl.crl/server.crl
# List na otmenenite sertifikati se generira chrez komandata:
# openssl ca -gencrl -out /etc/apache/ssl.crl/server.crl

# Niamame pod-udostoveriteli —  vsichko si go podpisvame nie. Ako imahme SubCA shte triabvashe da uvelichim dolnata stoinost s edno za vsiako mezhdinno zveno:
SSLVerifyClient 1

# Ako sa ni nuzhni promenlivi na obkruzhenieto za cgi skriptovete ni:
#<Directory /home/path/cgi-bin&>
# SSLOptions +StdEnvVars
#</Directory>

# Za da gledame kakvo tochno se sluchva mozhe da nablyudavame zaiavkite, koito nashiia survur poluchava:
CustomLog /var/log/apache/ssl_request_log \
“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”

</VirtualHost>

Nastroiki za ogranichavane na dostupa

Tezi nastroiki sushto se praviat v ramkite na virtualniia host, no tuk shte sa otdelno, za da ilyustrirat niakoi ot vuzmozhnostite. Za tiah se iziskva predostavianeto na PKCS#12 sertifikat ot strana na potrebitelia. Kak se suzdava toi mozhe da prochetete v statiiata za Postfix i TLS.

Otnovo poiasneniiata shte budat kato komentari:

# Za obshtiia sluchai niamame nikakvo ogranichenie. T.e. ne postaviame nikakvi usloviia potrebitelia da ni predstavi sertifikat, nito za poletata na tozi sertifikat:
SSLVerifyClient none

# A zashto ne i da priemem sertifikat, ako ima takuv. Tova ne bi se izpolzvalo na mnogo mesta, no mozhe da se ukazhe udachno reshenie za niakoi spetsifichni sluchai:
# SSLVerifyClient optional

# Za naistina interesnite mesta nie povishavame iziskvaniiata:
<Location /secure>
# Sega veche povishavame i iziskvaniiata kato dopuskame samo 3 kombinatsii ot shifri, zashtoto vsichki imame sviastni brauzuri. Tova shte nalozhi predogovariane na shifrite, ako po niakakva prichina e bila izbrana po-slaba kombinatsiia.
SSLCipherSuite HIGH:-MD5:-ADH:-3DES

# S dolnata direktiva iskame da ni bude predstaven podpisan ot nas validen sertifikat. Tazi direktiva se kombinira s SSLVerifyClient 1 i tova oznachava, che iskame tozi sertifikat da e podpisan ot nas.
SSLVerifyClient require

# Ot tuk nadolu za httpd 2.0.x stava trudno:
# Ili puk mozhe da go iziskame izrichno, kato ukazhem, che v poleto za organizatsiia triabva da sme nie:
# SSLRequire %{SSL_CLIENT_S_DN_O} eq “Linux-BG”

# Sushto taka e vuzmozhno i da dadem dostup i samo na otdelni podgrupi v nashata organizatsiia. Primerno administratorite na poshtenskiia ili ueb survura mozhe da si dostupvat kontrolnite paneli:
# SSLRequire %{SSL_CLIENT_S_DN_O} eq “Linux-BG” and \
# %{SSL_CLIENT_S_DN_OU} in {”Web Admin”, “Mail Admin”}

</Location>

# Vuzmozhnostta da proveriavame stoinostite v sertifikatnite poleta oznachava, che mozhe i da suzdadem direktorii, koito da sa dostupni prez ueb samo ot edin edinstven potrebitel
<Location /secure/peio>
SSLVerifyClient require
SSLRequire %{SSL_CLIENT_S_DN_CN} eq “Peio Popov”
</Location>

Za da pregledame sertifikatnite poleta mozhe da izpolzvame komandata:

openssl x509 -subject -noout -in cert.pem

Ako iskame da vidim tseliia sertifikat v tekstovi vid polzvame:

openssl x509 -text -noout -in cert.pem

Poniakoga mozhe da ni se nalozhi da ogranichim dostupa do niakoia direktoriia vuv virtualen host, koito e dostupen i po http. Za da prenasocha vsichki zaiavki kum https az polzvam mod_rewrite:

RewriteEngine On
RewriteBase /dir
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://servername/dir/$1 [R,L]

Vuzmozhnosti na SSLRequire

Sintaksisut na SSLRequire direktivata e izklyuchitelno guvkav i ni pozvoliava da vuvezhdame izklyuchitelno raznoobrazni ogranicheniia i sum siguren, che vseki shte nameri nuzhnite sredstva, za da zadovoliat nuzhdite mu. Neka samo spomena, che osven vsichki parametri na sertifikata razpolagame i sus standartnite promenlivi na obkruzhenieto (CGI 1.0) i apache i mozhe da gi vklyuchvame i tiah v izrazi kato vikame promenlivata pod formata na %{ImeNaPromenliva}.
Osven bogatstvoto ot promenlivi nie imame i vuzmozhnostite na BNF notatsiiata da sravniavame realni i zhelani stoinosti (vklyuchitelno i vuzmozhnost da suzdavame funktsii), a osven tova mozhe i da posochvame fail, ot koito da chetem.

Imaiki predvid tezi bogati vuzmozhnosti gornite primeri sa samo nachalno vuvedenie, za zapoznavane sus sintaksisa im i az ne vizhdam smisul da se opitvam da izbroiavam vsichkite im vuzmozhni prilozheniia.

Za chetene
mod_ssl e izklyuchitelno dobre i dostupno dokumentiran. Vseki, koito se zapoznae s dokumentatsiiata mu shte mozhe da izpolzva negovite pulni vuzmozhnosti. Vse pak e dobre i da poglednete spetsifikite i otvorenite problemi svurzani s paketite v sistemata za sledene na greshki na distributsiiata vi.



<< Igrai na dumi | Postfix s TLS podruzhka >>