| <HTML> |
| <HEAD> |
| <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2"> |
| <META NAME="Author" CONTENT="Adam Hernik"> |
| <TITLE>Wszystko co powiniene¶ wiedzieæ o tworzeniu certyfikatów ale nie chce Ci siê poszukaæ w dokumentacji</TITLE> |
| </HEAD> |
| <BODY TEXT="#000000" BGCOLOR="#CCCCCC" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000"> |
| |
| <CENTER> |
| <H1> |
| <FONT SIZE=+2>Wszystko co powiniene¶ wiedzieæ o tworzeniu certyfikatów |
| ale nie chce Ci siê</FONT></H1></CENTER> |
| |
| <CENTER> |
| <H1> |
| <FONT SIZE=+2>poszukaæ w dokumentacji.</FONT></H1></CENTER> |
| |
| |
| <P><B><FONT SIZE=+1>Co powinno znajdowaæ siê na Twoim dysku zamin zostaniesz |
| "Certificate Authorities".</FONT></B> |
| |
| <P>Podstawowym oprogramowaniem jest oczywi¶cie <A HREF="http://www.openssl.org">openssl</A>. |
| W tym miejscu nale¿y zachowaæ czujno¶æ |
| <BR>bo openssl <B>MUSI</B> byæ co najmniej w wersji 0.9.2b dziêki czemu |
| ominie Ciê czê¶æ karko³omnych |
| <BR>operacji przy pomocy <A HREF="http://www.drh-consultancy.demon.co.uk">pcks12</A> |
| ktory tak¿e musisz posiadaæ w swoich zasobach dyskowych. |
| <BR>Je¶li masz ju¿ zainstalowane powy¿sze oprogramowanie mo¿esz zacz±æ |
| tworzyæ certyfikaty. |
| |
| <P><B><FONT SIZE=+1>Konfiguracja openssl.</FONT></B> |
| |
| <P>Zak³adam ze openssl jest zainstalowany standardowo czyli w <B>/usr/local/ssl</B>. |
| Pierwszym krokiem jest |
| <BR>przejrzenie i "dokonfigurowanie" <B>/usr/local/ssl/lib/openssl.cnf</B>. |
| Mój domowy konfig wygl±da nastêpuj±co |
| <BR>(kolorem czerwonym zaznaczylem opcje które raczej powiniene¶ zmieniæ) |
| : |
| <BR><FONT SIZE=-2><A HREF="#koniec openssl.cnf">je¶li nie chce Ci siê tego |
| czytaæ to skocz na koniec konfiga</A></FONT> |
| |
| <P><I>#</I> |
| <BR><I># OpenSSL example configuration file.</I> |
| <BR><I># This is mostly being used for generation of certificate requests.</I> |
| <BR><I>#</I> |
| <BR><I> </I> |
| <BR><I>RANDFILE |
| = $ENV::HOME/.rnd</I> |
| <BR><I>oid_file |
| = $ENV::HOME/.oid</I> |
| <BR><I>oid_section |
| = new_oids</I> |
| <BR><I> </I> |
| <BR><I>[ new_oids ]</I> |
| <BR><I> </I> |
| <BR><I># We can add new OIDs in here for use by 'ca' and 'req'.</I> |
| <BR><I># Add a simple OID like this:</I> |
| <BR><I># testoid1=1.2.3.4</I> |
| <BR><I># Or use config file substitution like this:</I> |
| <BR><I># testoid2=${testoid1}.5.6</I> |
| <BR><I> </I> |
| <BR><I>####################################################################</I> |
| <BR><I>[ ca ]</I> |
| <BR><I>default_ca = CA_default |
| # The default ca section</I> |
| <BR><I> </I> |
| <BR><I>####################################################################</I> |
| <BR><I>[ CA_default ]</I> |
| <BR><I> </I> |
| <BR><I>dir |
| = ./demoCA |
| # Where everything is kept</I> |
| <BR><I>certs |
| = $dir/certs |
| # Where the issued certs are kept</I> |
| <BR><I>crl_dir = $dir/crl |
| # Where the issued crl are kept</I> |
| <BR><I>database = $dir/index.txt |
| # database index file.</I> |
| <BR><I>new_certs_dir = $dir/newcerts |
| # default place for new certs.</I> |
| <BR><I> </I> |
| <BR><I>certificate = $dir/cacert.pem |
| # The CA certificate</I> |
| <BR><I>serial = $dir/serial |
| # The current serial number</I> |
| <BR><I>crl |
| = $dir/crl.pem # |
| The current CRL</I> |
| <BR><I>private_key = $dir/private/cakey.pem# The |
| private key</I> |
| <BR><I>RANDFILE = $dir/private/.rand |
| # private random number file</I> |
| <BR><I> </I> |
| <BR><I>x509_extensions = usr_cert |
| # The extensions to add to the cert</I> |
| <BR><I>crl_extensions = crl_ext |
| # Extensions to add to CRL</I> |
| <BR><I>default_days = 365 |
| # how long to certify for</I> |
| <BR><I>default_crl_days= 30 |
| # how long before next CRL</I> |
| <BR><I>default_md = md5 |
| # which md to use.</I> |
| <BR><I>preserve = no |
| # keep passed DN ordering</I> |
| <BR><I> </I> |
| <BR><I># A few difference way of specifying how similar the request should |
| look</I> |
| <BR><I># For type CA, the listed attributes must be the same, and the optional</I> |
| <BR><I># and supplied fields are just that :-)</I> |
| <BR><I>policy = policy_match</I> |
| <BR><I># For the CA policy</I> |
| <BR><I>[ policy_match ]</I> |
| <BR><I>countryName |
| = match</I> |
| <BR><I>stateOrProvinceName = match</I> |
| <BR><I>organizationName = match</I> |
| <BR><I>organizationalUnitName = optional</I> |
| <BR><I>commonName |
| = supplied</I> |
| <BR><I>emailAddress |
| = optional</I> |
| <BR><I> </I> |
| <BR><I># For the 'anything' policy</I> |
| <BR><I># At this point in time, you must list all acceptable 'object'</I> |
| <BR><I># types.</I> |
| <BR><I>[ policy_anything ]</I> |
| <BR><I>countryName |
| = optional</I> |
| <BR><I>stateOrProvinceName = optional</I> |
| <BR><I>localityName |
| = optional</I> |
| <BR><I>organizationName = optional</I> |
| <BR><I>organizationalUnitName = optional</I> |
| <BR><I>commonName |
| = supplied</I> |
| <BR><I>emailAddress |
| = optional</I> |
| <BR><I> </I> |
| <BR><I>####################################################################</I> |
| <BR><A NAME="req"></A><I>[ req ]</I> |
| <BR><I>default_bits |
| = <FONT COLOR="#FF0000">1024</FONT></I> |
| <BR><I>default_keyfile |
| = privkey.pem</I> |
| <BR><I>distinguished_name = req_distinguished_name</I> |
| <BR><I>attributes |
| = req_attributes</I> |
| <BR><I>x509_extensions = v3_ca # The extensions to add to the self signed |
| cert</I> |
| <BR><I> </I> |
| <BR><I>[ req_distinguished_name ]</I> |
| <BR><I>countryName |
| = Country Name (2 letter code)</I> |
| <BR><I>countryName_default |
| = <FONT COLOR="#FF0000">PL</FONT></I> |
| <BR><I>countryName_min |
| = 2</I> |
| <BR><I>countryName_max |
| = 2</I> |
| <BR><I> </I> |
| <BR><I>stateOrProvinceName |
| = State i Prowincja</I> |
| <BR><I>stateOrProvinceName_default = <FONT COLOR="#FF0000">State-Prowincja |
| domyslna</FONT></I> |
| <BR><I>localityName |
| = Locality Name (eg, city)</I> |
| <BR><I>localityName_default |
| = <FONT COLOR="#FF0000">Lodz</FONT></I> |
| <BR><I> </I> |
| <BR><I>0.organizationName |
| = Organization Name (eg, company)</I> |
| <BR><I>0.organizationName_default = <FONT COLOR="#FF0000">Nawza |
| Organizacji</FONT></I> |
| <BR><I> </I> |
| <BR><I># we can do this but it is not needed normally :-)</I> |
| <BR><I>#1.organizationName |
| = Second Organization Name (eg, company)</I> |
| <BR><I>#1.organizationName_default = World Wide |
| Web Pty Ltd</I> |
| <BR><I>organizationalUnitName |
| = Organizational Unit Name (eg, section)</I> |
| <BR><I>organizationalUnitName_default = <FONT COLOR="#FF0000">Unit |
| name domyslny</FONT></I> |
| <BR><I> </I> |
| <BR><I>commonName |
| = Common Name (eg, YOUR name)</I> |
| <BR><I>commonName_max |
| = 64</I> |
| <BR><I> </I> |
| <BR><I>emailAddress |
| = Email Address</I> |
| <BR><I>emailAddress_max |
| = 40</I> |
| <BR><I> </I> |
| <BR><I># SET-ex3 |
| = SET extension number 3</I> |
| <BR><I> </I> |
| <BR><I>[ req_attributes ]</I> |
| <BR><I>challengePassword |
| = A challenge password</I> |
| <BR><I>challengePassword_min = 4</I> |
| <BR><I>challengePassword_max = 20</I> |
| <BR><I> </I> |
| <BR><I>unstructuredName |
| = An optional company name</I> |
| <BR><I> </I> |
| <BR><A NAME="usr_cert"></A><I>[ usr_cert ]</I> |
| <BR><I> </I> |
| <BR><I># These extensions are added when 'ca' signs a request.</I> |
| <BR><I> </I> |
| <BR><I># This goes against PKIX guidelines but some CAs do it and some |
| software</I> |
| <BR><I># requires this to avoid interpreting an end user certificate as |
| a CA.</I> |
| <BR><I> </I> |
| <BR><I>basicConstraints=CA:FALSE</I> |
| <BR><I> </I> |
| <BR><I># Here are some examples of the usage of nsCertType. If it is omitted</I> |
| <BR><I># the certificate can be used for anything *except* object signing.</I> |
| <BR><I> </I> |
| <BR><A NAME="server"></A><I># This is OK for an SSL server.</I> |
| <BR><I><FONT COLOR="#006600">#nsCertType |
| = server</FONT></I> |
| <BR><I> </I> |
| <BR><I># For an object signing certificate this would be used.</I> |
| <BR><I>#nsCertType = objsign</I> |
| <BR><I> </I> |
| <BR><A NAME="klient"></A><I># For normal client use this is typical</I> |
| <BR><I><FONT COLOR="#006600">nsCertType = client, email</FONT></I> |
| <BR><I> </I> |
| <BR><I># This is typical also</I> |
| <BR><I> </I> |
| <BR><I>keyUsage = nonRepudiation, digitalSignature, keyEncipherment</I> |
| <BR><I> </I> |
| <BR><I>nsComment |
| = "<FONT COLOR="#FF0000">OpenSSL Generated Certificate</FONT>"</I> |
| <BR><I> </I> |
| <BR><I># PKIX recommendations</I> |
| <BR><I>subjectKeyIdentifier=hash</I> |
| <BR><I>authorityKeyIdentifier=keyid,issuer:always</I> |
| <BR><I># Import the email address.</I> |
| <BR><I> </I> |
| <BR><I>subjectAltName=email:copy</I> |
| <BR><I> </I> |
| <BR><I># Copy subject details</I> |
| <BR><I> </I> |
| <BR><I>issuerAltName=issuer:copy</I> |
| <BR><I> </I> |
| <BR><I>#nsCaRevocationUrl |
| = http://www.domain.dom/ca-crl.pem</I> |
| <BR><I>#nsBaseUrl</I> |
| <BR><I>#nsRevocationUrl</I> |
| <BR><I>#nsRenewalUrl</I> |
| <BR><I>#nsCaPolicyUrl</I> |
| <BR><I>#nsSslServerName</I> |
| <BR><I> </I> |
| <BR><I>[ v3_ca]</I> |
| <BR><I> </I> |
| <BR><I># Extensions for a typical CA</I> |
| <BR><I> </I> |
| <BR><I># It's a CA certificate</I> |
| <BR><I>basicConstraints = CA:true</I> |
| <BR><I> </I> |
| <BR><I># PKIX recommendation.</I> |
| <BR><I> </I> |
| <BR><I>subjectKeyIdentifier=hash</I> |
| <BR><I> </I> |
| <BR><I>authorityKeyIdentifier=keyid:always,issuer:always</I> |
| <BR><I> </I> |
| <BR><I># This is what PKIX recommends but some broken software chokes on |
| critical</I> |
| <BR><I># extensions.</I> |
| <BR><I>#basicConstraints = critical,CA:true</I> |
| <BR><I> </I> |
| <BR><I># Key usage: again this should really be critical.</I> |
| <BR><I>keyUsage = cRLSign, keyCertSign</I> |
| <BR><I> </I> |
| <BR><I># Some might want this also</I> |
| <BR><I>nsCertType = sslCA, emailCA, objCA</I> |
| <BR><I> </I> |
| <BR><I># Include email address in subject alt name: another PKIX recommendation</I> |
| <BR><I>subjectAltName=email:copy</I> |
| <BR><I># Copy issuer details</I> |
| <BR><I>issuerAltName=issuer:copy</I> |
| <BR><I> </I> |
| <BR><I># RAW DER hex encoding of an extension: beware experts only!</I> |
| <BR><I># 1.2.3.5=RAW:02:03</I> |
| <BR><I># You can even override a supported extension:</I> |
| <BR><I># basicConstraints= critical, RAW:30:03:01:01:FF</I> |
| <BR><I> </I> |
| <BR><I>[ crl_ext ]</I> |
| <BR><I> </I> |
| <BR><I># CRL extensions.</I> |
| <BR><I># Only issuerAltName and authorityKeyIdentifier make any sense in |
| a CRL.</I> |
| |
| <P><I>issuerAltName=issuer:copy</I> |
| <BR><I>authorityKeyIdentifier=keyid:always,issuer:always</I> |
| <BR>################################################################################ |
| <BR>########## koniec pliku openssl.cnf |
| |
| <P><A NAME="koniec openssl.cnf"></A>Jak widaæ zmiany s± praktycznie kosmetyczne. |
| Nale¿y zwrócic jedynie uwagê na opcjê <A HREF="#req">default_bits</A> w |
| sekcji req. |
| <BR>W momencie generowania certyfikatu CA powinna mieæ ona warto¶æ 1024 |
| lub wiêcej, natomiast w trakcie tworzenia |
| <BR>certyfikatów klienckich winno mieæ siê na uwadze wredn± cechê produktów |
| M$ dostêpnych poza granicami USA. |
| <BR>Nie s± one w stanie zaimportowaæ kluczy maj±cych wiêcej ni¿ 512 bitów. |
| W takim przypadku default_bits nale¿y |
| <BR>zmniejszyæ do tej warto¶ci. Je¶li chodzi o Netscapa konieczno¶æ taka |
| nie wystêpuje, nawet gdy nie jest on |
| <BR>patchowany przy pomocy <A HREF="http://www.fortify.net/">Fortify</A>. |
| Jednak¿e klucz nie powinien byæ wiêkszy ni¿ 1024 bity. |
| |
| <P><B><FONT SIZE=+1>Generowanie certyfikatu CA</FONT></B> |
| |
| <P>Pierwszy± czynno¶ci± jak± nale¿y wykonaæ jest wygenerowanie certyfikatu |
| CA czyli czego¶ czym bêd± |
| <BR>podpiswane certyfikaty udostêpniane klientom. Uruchom rxvt lub co¶ |
| innego i wykonaj polecenie: |
| |
| <P><I>adas:~# <B>cd /usr/local/ssl/bin</B></I> |
| <BR><I>adas:/usr/local/ssl/bin# <B>./CA.pl -newca</B></I> |
| |
| <P><I>CA certificate filename (or enter to create)</I> |
| |
| <P><I>Making CA certificate ...</I> |
| <BR><I>Using configuration from /usr/local/ssl/lib/openssl.cnf</I> |
| <BR><I>Generating a 1024 bit RSA private key</I> |
| <BR><I>..+++++</I> |
| <BR><I>....+++++</I> |
| <BR><I>writing new private key to './demoCA/private/cakey.pem'</I> |
| <BR><A NAME="pem_pass"></A><I><FONT COLOR="#009900">Enter PEM pass phrase:</FONT></I> |
| <BR><I><FONT COLOR="#009900">Verifying password - Enter PEM pass phrase:</FONT></I> |
| <BR><I>-----</I> |
| <BR><I>You are about to be asked to enter information that will be incorporated</I> |
| <BR><I>into your certificate request.</I> |
| <BR><I>What you are about to enter is what is called a Distinguished Name |
| or a DN.</I> |
| <BR><I>There are quite a few fields but you can leave some blank</I> |
| <BR><I>For some fields there will be a default value,</I> |
| <BR><I>If you enter '.', the field will be left blank.</I> |
| <BR><I>-----</I> |
| <BR><I>Country Name (2 letter code) [PL]:</I> |
| <BR><I>State i Prowincja [Kraina Bezrobotnych Szwaczek]:</I> |
| <BR><I>Locality Name (eg, city) [Lodz]:</I> |
| <BR><I>Organization Name (eg, company) [Instytut Badan Czarow i Magii]:</I> |
| <BR><I>Organizational Unit Name (eg, section) [Komorka d/s Egzorcyzmow |
| i Opentan]:</I> |
| <BR><I>Common Name (eg, YOUR name) []:Adam Hernik</I> |
| <BR><I>Email Address []:adas@infocentrum.com</I> |
| |
| <P><I>adas:/usr/local/ssl/bin#</I> |
| |
| <P>Skrypt CA.pl uruchomiony poraz pierwszy tworzy w /usr/local/ssl/bin |
| katalog o nazwie demoCA w którym znajduje siê |
| <BR>wygenerowany przed chwil± certyfikat publiczny <B>cacert.pem</B> (do³±czany |
| pó¿niej do certyfikatów klienckich) oraz tajny |
| <BR>zabezpieczony <A HREF="#pem_pass">has³em</A> klucz <B>cakey.pem</B> |
| którym bêdziesz podpisywa³ certyfikaty wydawane u¿ytkownikom. Klucz i has³o |
| <BR>oczywi¶cie nale¿y dobrze chroniæ i najlepiej jest gdy znajduje siê |
| na serwerze tylko w momencie generowania certyfikatu. |
| <BR>Ponowne uruchomienie CA.pl z parametrem -newca niszczy to co pracowicie |
| stworzy³e¶ i generuje nowy klucz i certyfikat. |
| <BR> |
| |
| <P><B><FONT SIZE=+1>Tworzenie certyfikatu dla stunnela i innych serwerów</FONT></B> |
| <BR> |
| |
| <P>Zanim siê do tego zabierzesz powiniene¶ lekko zmodyfikowac skrypt <B>CA.pl</B> |
| oraz plik konfiguracyjny <B>openssl.cnf</B>. |
| <BR>Skopiuj je odpowiednio do plików <B>/usr/local/ssl/bin/CAserv.pl</B> |
| i <B>/usr/local/ssl/lib/openssl_serv.cnf</B>.<B></B> |
| <BR>Generowane certyfikaty domy¶lnie zabezpieczone s± has³em, w takim przypadku |
| w momencie startu stunnela zawsze |
| <BR>bêdziesz pytany o haslo zabezpieczaj±ce, co skutecznie uniemo¿liwi |
| automatyczne uruchamianie programu w czasie |
| <BR>bootowania serwera, czy te¿ przy próbie wystartowania go przez |
| inetd. Nale¿y poprawiæ <B>linie 40</B> i <B>41</B> skryptu |
| <BR><B>CAserv.pl</B> z |
| |
| <P><FONT COLOR="#006600">linia 40:</FONT> |
| <BR><B>$REQ="openssl req <I>$SSLEAY_CONFIG</I>";</B> |
| <BR>na |
| <BR><B>$REQ="openssl req <FONT COLOR="#FF0000">-nodes -config /usr/local/ssl/lib/openssl_serv.cnf</FONT>";</B> |
| |
| <P><FONT COLOR="#006600">linia 41:</FONT> |
| <BR><B>$CA="openssl ca <I>$SSLEAY_CONFIG</I>";</B> |
| <BR>na |
| <BR><B>$CA="openssl ca <FONT COLOR="#FF0000">-config /usr/local/ssl/lib/openssl_serv.cnf</FONT>";</B> |
| <BR> |
| |
| <P>Natomiast w pliku <B>/usr/local/ssl/lib/openssl_serv.cnf </B>nalezy |
| w sekcji <A HREF="#usr_cert">usr_cert</A> "zahashowaæ" linijkê |
| <BR><A HREF="#klient">nsCertType = client, email</A> oraz "odhashowaæ" |
| linijkê <A HREF="#server">nsCertType = server</A> . Je¶li tego |
| nie zrobisz klient nie bêdzie |
| <BR>poprawnie rozpoznawa³ typu certyfikatu. A teraz kolej na wygenerowanie |
| "requestu" posy³anego zazwyczaj do CA. |
| <BR>Bêd±c w katalogu /usr/local/ssl/bin wykonaj: |
| |
| <P><I>adas:/usr/local/ssl/bin# .<B>/CAserv.pl -newreq</B></I> |
| <BR><I>Using configuration from /usr/local/ssl/lib/openssl_serv.cnf</I> |
| <BR><I>Generating a 1024 bit RSA private key</I> |
| <BR><I>..............................+++++</I> |
| <BR><I>.........+++++</I> |
| <BR><I>writing new private key to 'newreq.pem'</I> |
| <BR><I>-----</I> |
| <BR><I>You are about to be asked to enter information that will be incorporated</I> |
| <BR><I>into your certificate request.</I> |
| <BR><I>What you are about to enter is what is called a Distinguished Name |
| or a DN.</I> |
| <BR><I>There are quite a few fields but you can leave some blank</I> |
| <BR><I>For some fields there will be a default value,</I> |
| <BR><I>If you enter '.', the field will be left blank.</I> |
| <BR><I>-----</I> |
| <BR><I>Country Name (2 letter code) [PL]:</I> |
| <BR><I>State i Prowincja [Kraina Bezrobotnych Szwaczek]:Kraina latajacych |
| scyzorykow</I> |
| <BR><I>Locality Name (eg, city) [Lodz]:Sielpia</I> |
| <BR><I>Organization Name (eg, company) [Instytut Badan Czarow i Magii]:Bar |
| Sloneczko</I> |
| <BR><I>Organizational Unit Name (eg, section) [Komorka d/s Egzorcyzmow |
| i Opentan]:Kuflownia</I> |
| <BR><I><FONT COLOR="#FF0000">Common Name (eg, YOUR name) []:adas.pl</FONT></I> |
| <BR><I>Email Address []:adas@adas.pl</I> |
| |
| <P><I>Please enter the following 'extra' attributes</I> |
| <BR><I>to be sent with your certificate request</I> |
| <BR><I>A challenge password []:</I> |
| <BR><I>An optional company name []:</I> |
| <BR><I>Request (and private key) is in newreq.pem</I> |
| <BR><I>adas:/usr/local/ssl/bin#</I> |
| |
| <P>Polem o którym warto wspomnieæ jest "Common Name" (zaznaczone na czerwono). |
| W trakcie generowania requestu |
| <BR>nale¿y w tym miejscu wpisaæ <B>FQDN serwera</B> na którym bêdzie on |
| u¿ywany. W przeciwnym wypadku w chwili |
| <BR>po³±czenia klient bêdzie twierdzi³, ¿e certyfikat jakim przedstawia |
| siê serwer nie nale¿y do niego. Unikniemy w ten |
| <BR>sposób niepotrzebnego klikania. Kolejn± czynno¶ci± jest podpisanie |
| wygenerowanego requestu. W katalogu |
| <BR>/usr/local/ssl/bin wykonaj polecenie: |
| |
| <P><I>adas:/usr/local/ssl/bin# .<B>/CAserv.pl -sign</B></I> |
| <BR><I>Using configuration from /usr/local/ssl/lib/openssl.cnf</I> |
| <BR><I><FONT COLOR="#009900">Enter PEM pass phrase:</FONT></I> |
| <BR><I>Check that the request matches the signature</I> |
| <BR><I>Signature ok</I> |
| <BR><I>The Subjects Distinguished Name is as follows</I> |
| <BR><I>countryName |
| :PRINTABLE:'PL'</I> |
| <BR><I>stateOrProvinceName :PRINTABLE:'Kraina latajacych scyzorykow'</I> |
| <BR><I>localityName |
| :PRINTABLE:'Sielpia'</I> |
| <BR><I>organizationName :PRINTABLE:'Bar Sloneczko'</I> |
| <BR><I>organizationalUnitName:PRINTABLE:'Kuflownia'</I> |
| <BR><I>commonName |
| :PRINTABLE:'adas.pl'</I> |
| <BR><I>emailAddress |
| :IA5STRING:'adas@adas.pl'</I> |
| <BR><I>Certificate is to be certified until Mar 26 21:06:13 2000 GMT (365 |
| days)</I> |
| <BR><I>Sign the certificate? [y/n]:y</I> |
| <BR> |
| |
| <P><I>1 out of 1 certificate requests certified, commit? [y/n]y</I> |
| <BR><I>Write out database with 1 new entries</I> |
| <BR><I>Data Base Updated</I> |
| <BR><I>Signed certificate is in newcert.pem</I> |
| <BR><I>adas:/usr/local/ssl/bin#</I> |
| |
| <P>W trakcie podpisywania bêdziesz pytany o has³o zabezpieczaj±ce klucz |
| prywatny CA (zaznaczone na zielono). |
| <BR>Po tej operacji powiniene¶ w katalogu /usr/local/ssl/bin otrzymaæ 2 |
| pliki: <B>newcert.pem</B> oraz <B>newreq.pem</B>. |
| <BR>Zanim zaczniesz ich u¿ywaæ musisz wykonaæ jeszcze jedn± operacje, a |
| mianowicie z³orzyæ wszystko do kupy. |
| <BR>Wykonujesz: <B>cat newcert.pem newreq.pem > httpds.pem</B> a nastêpnie |
| poddajesz tak powsta³y certyfikat edycji. |
| <BR>Nale¿y z pliku httpds.pem nale¿y usun±æ wszystkie niepotrzebne informacje |
| tak by pozosta³ jedynie certyfikat oraz |
| <BR>klucz prywatny. Po tej operacji plik httpds.pem powinien wygl±daæ mniej |
| wiêcej tak: |
| |
| <P><I>issuer :/C=PL/ST=Kraina Bezrobotnych Szwaczek/L=Lodz/O=Instytut Badan |
| Czarow i Magii/OU=Komorka d/s Egzorcyzmow i opentan/CN=Adam Hernik/Email=adas@infocentrum.com</I> |
| <BR><I>subject:/C=PL/ST=Kraina latajacych scyzorykow/L=Sielpia/O=Bar Sloneczko/OU=Kuflownia/CN=adas.pl/</I> |
| <BR><I>Email=adas@adas.pl</I> |
| <BR><I>-----BEGIN CERTIFICATE-----</I> |
| <BR><I> Tu s± magiczne dane</I> |
| <BR><I>-----END CERTIFICATE-----</I> |
| |
| <P><I>-----BEGIN RSA PRIVATE KEY-----</I> |
| <BR><I> I tu te¿ s± magiczne dane</I> |
| <BR><I>-----END RSA PRIVATE KEY-----</I> |
| |
| <P>Spreparowany w ten sposób plik umieszczamy w katalogu /usr/local/ssl/certs |
| i zajmujemy siê generowaniem dwu |
| <BR>certyfikatów klienckich. |
| <BR> |
| |
| <P><B><FONT SIZE=+1>Generowanie i importowanie certyfikatów klienckich |
| do Netscape Communikatora.</FONT></B> |
| <BR> |
| <BR>Generalnie s± dwie metody tworzenia i importowania certyfikatów klienckich |
| do Netscapa |
| <BR><B>Sposób pierwszy:</B> |
| <BR>Przy pomocy komendy <B>CA.pl -newreq</B> wygeneruj request a nastêpnie |
| przy pomocy <B>CA.pl -sign</B> podpisz go. |
| <BR>Pytanie o <I>challenge password</I> zignoruj. Kolejn± czynno¶ci± jest |
| scalenie i podczyszczenie certyfikatu. |
| <BR>W przypadku certyfikatu klienta wa¿ne jest podanie <B>prawid³owego |
| adresu email</B> <B>!</B> Bez tego nie bêdzie mo¿na |
| <BR>podpisywaæ i szyfrowaæ listów. Stwórz dwa certyfikaty. Bêd± one |
| potrzebne do wyja¶nienia dzia³ania opcji -v 3 |
| <BR>programu stunnel. Zak³adam ¿e pierwszy certyfikat nale¿y do Jana Kowalskiego |
| jan@ibczim.pl zachowany w |
| <BR>pliku jan.pem a drugi do Genowefy Pigwy pigwa@scyzoryki.pl znajduj±cym |
| siê w pliku pigwa.pem. Przed |
| <BR>zaimportowaniem plików do Netscpea nale¿y przekonwertowaæ je z formatu |
| PEM do PCKS12. Wykonuje siê to |
| <BR>przy pomocy wspomnianego na pocz±tku programu <B>pcks12</B>. Aby przekonwertowaæ |
| certyfikat Jan Kowalskiego, |
| <BR>w katalogu w ktorym znajduje siê plik jan.pem wykonaj: |
| <BR> |
| |
| <P><B>pkcs12 -export -name "Jan Kowalski jan@ibczim.pl" -in jan.pem -out |
| jan.p12 -certfile /usr/local/ssl/bin/demoCA/cacert.pem</B> |
| |
| <P>(<FONT COLOR="#990000">jest to jedna linia !!!</FONT>) |
| <BR>w wyniku czego powstanie plik jan.p12 który mo¿na zaimportowaæ do Netscapea. |
| Bardzo wa¿n± opcj± jest |
| <BR><B><I>-certfile /usr/local/ssl/bin/demoCA/cacert.pem</I></B>. Bez niej |
| nie bêdzie mo¿na w prawid³owy sposób podpisywaæ listów. |
| <BR>Prze³±cznik -certfile powoduje do³±czenie publicznego certyfikatu CA |
| do certyfikatu klienta dziêki czemu Netscape |
| <BR>jest wstanie "wyekstrachowaæ" certyfikat CA i dodaæ go do wewnêtrznej |
| bazy CA. Wykonaj powy¿sz± operacjê tak¿e |
| <BR>dla pigwy. Samo zaimportowanie certyfikatu jest bardzo proste wykonuje |
| siê to klikaj±c w Netscape na |
| |
| <P><B>Security-> Yours -> Import a Certificate</B> |
| |
| <P>Po zaimportowaniu nale¿y w <B>Security -> Signers</B> zaznaczyæ nasz |
| CA certyfikat a nastêpnie klikn±æ na przycisku Edit |
| <BR>oraz "zaczekowaæ" opcje: |
| |
| <P><I>Accept this Certificate Authority for Certifying network sites</I> |
| <BR><I>Accept this Certificate Authority for Certifying e-mail users</I> |
| |
| <P>Od tej pory nasz certyfikat bêdzie traktowany na równi z innymi, komercyjnymi. |
| |
| <P><B>Sposób drugi:</B> |
| <BR>Polega on na wygenerowaniu i imporcie certyfikatu poprzez strone www. |
| Wraz z stunnelem dostarczane s± |
| <BR>przk³adowe strony (dwie) i skrypty (dwa). Skrypty nale¿y raczej |
| traktowaæ jako wzorzec i ka¿dy powinien napisaæ |
| <BR>swoje, bardziej bezpieczne. Pierwszym krokiem jest import certyfikatu |
| CA. U¿ywa siê do tego strony <B>importCA.html</B> |
| <BR>oraz skryptu <B>importCA.sh</B>. Sam skrypt wygl±da tak: |
| |
| <P><I>#!/bin/bash</I> |
| |
| <P><I>echo "Content-type: application/x-x509-ca-cert"</I> |
| <BR><I>echo</I> |
| <BR><I>cat <FONT COLOR="#CC0000">/var/lib/httpds/cgi-bin/<B>cacert.pem</B></FONT></I> |
| |
| <P>cacert.pem jest to oczywi¶cie certyfikat publiczny CA znajduj±cy siê |
| w katalogu /usr/local/ssl/bin/demoCA |
| <BR>który nale¿y przekopiowaæ do katalogu cgi-bin serwera httpd oraz nadaæ |
| mu odpowiednie prawa dostêpu. |
| <BR>Po zaimportowaniu certyfikatu CA nale¿y w Security->Signers zaznaczyæ |
| do jakich celów bêdziemy uznawli |
| <BR>go za wiarygodny. Do generowania certyfikatu klienta wykorzystamy pozosta³± |
| strone i skrypt. Zanim do tego dojdzie |
| <BR>nale¿y "dokonfigurowaæ" skrypt i stworzyæ potrzebne katalogi. |
| W /tmp (lub w innym miejscu) nalezy stworzyæ |
| <BR>katalog ssl a nastêpnie przekopiowaæ do niego katalog <B>/usr/local/bin/demoCA</B> |
| oraz plik <B>openssl.cnf</B>. |
| <BR>Jako ¿e skrypty domy¶lnie uruchamiane s± z prawami u¿ytkownika nobody |
| nale¿y uczyniæ go wla¶cicielem |
| <BR>katalogu /tmp/ssl i ca³ej jego zawarto¶ci. Kolejn± czynno¶ci± jest |
| wygenerowanie pliku <B>.rnd</B>. W Linuxie robimy to |
| <BR>tak: |
| <BR><B>cat /dev/random > /tmp/ssl/.rnd</B> |
| <BR>czekamy chwilkê tak by plik .rnd mia³ wielko¶æ oko³o 1024 B po czym |
| w³a¶cicielem pliku robimy u¿ytkownika nobody. |
| <BR>Teraz trzeba przekonfigurowaæ plik /tmp/ssl/openssl.cnf |
| |
| <P><I>#</I> |
| <BR><I># OpenSSL example configuration file.</I> |
| <BR><I># This is mostly being used for generation of certificate requests.</I> |
| <BR><I>#</I> |
| <BR><I> </I> |
| <BR><I><FONT COLOR="#FF0000">RANDFILE |
| = /tmp/ssl/.rnd</FONT></I> |
| <BR><I>#oid_file |
| = /tmp/ssl/.oid</I> |
| <BR><I>oid_section |
| = new_oids</I> |
| <BR><I> </I> |
| <BR><I>[ new_oids ]</I> |
| <BR><I> </I> |
| <BR><I># We can add new OIDs in here for use by 'ca' and 'req'.</I> |
| <BR><I># Add a simple OID like this:</I> |
| <BR><I># testoid1=1.2.3.4</I> |
| <BR><I># Or use config file substitution like this:</I> |
| <BR><I># testoid2=${testoid1}.5.6</I><I></I> |
| |
| <P><I>####################################################################</I> |
| <BR><I>[ ca ]</I> |
| <BR><I>default_ca = CA_default |
| # The default ca section</I><I></I> |
| |
| <P><I>####################################################################</I> |
| <BR><I>[ CA_default ]</I> |
| <BR><I> </I> |
| <BR><I><FONT COLOR="#FF0000">dir |
| = /tmp/ssl/demoCA |
| # Where everything is kept</FONT></I> |
| <BR><I>certs |
| = $dir/certs |
| # Where the issued certs are kept</I> |
| <BR><I>crl_dir = $dir/crl |
| # Where the issued crl are kept</I> |
| <BR><I>database = $dir/index.txt |
| # database index file.</I> |
| <BR><I>new_certs_dir = $dir/newcerts |
| # default place for new certs.</I> |
| <BR> |
| <BR>Nale¿y zmieniæ opcje zaznaczone na czerwono. Ostatni± czynno¶ci± jest |
| sprawdzenie i ewentualne poprawienie |
| <BR>strony ca.html i skryptu ca.pl. W pliku ca.html nalezy wpisaæ poprawn± |
| nazwê serwera na którym znajduje siê |
| <BR>skrypt ca.pl czyli linijkê <B><FORM ACTION="<FONT COLOR="#FF0000">http://localhost/cgi-bin/ca.pl</FONT>" |
| METHOD=POST></B>. W ca.pl |
| <BR>nale¿y skontrolowaæ poprawno¶æ podanych ¶cie¿ek oraz wpisaæ has³o jakim |
| zabezpieczony jest klucz prywatny CA |
| <BR>(zmienna $certpass zaznaczona na czerwono). |
| <BR> |
| |
| <P><I>#!/usr/bin/perl</I> |
| <BR><I>#ca.pl</I><I></I> |
| |
| <P><I>$config = "/tmp/ssl/openssl.cnf";</I> |
| <BR><I>$capath = "/usr/local/ssl/bin/openssl ca";</I> |
| <BR><I><FONT COLOR="#FF0000">$certpass = "tu_jest_haslo";</FONT></I> |
| <BR><I>$tempca = "/tmp/ssl/cli".rand 10000;</I> |
| <BR><I>$tempout = "/tmp/ssl/certtmp".rand 10000;</I> |
| <BR><I>$caout = "/tmp/ssl/certwynik.txt";</I> |
| <BR><I>$CAcert = "/tmp/ssl/demoCA/cacert.pem";</I> |
| <BR><I>...</I> |
| <BR> |
| |
| <P>Po umieszczeniu tak przygotowanych stron i skryptów na serwerze bêdzie |
| mo¿na generowaæ certyfikaty dla klientów. |
| |
| <P><B>Wady i zalety obydwu sposobów generowania i instalowania certyfikatów.</B> |
| |
| <P><A NAME="usuwanie"></A>Jak wynika z powy¿szego opisu bezpieczniejszym |
| i polecanym przeze mnie jest sposób pierwszy. Jego powa¿n± wad± |
| <BR>jest fakt ¿e cz³owiek generuj±cy certyfikaty znajduje siê w posiadaniu |
| klucza prywatnego osoby wystêpuj±cej o |
| <BR>certyfikat. <FONT COLOR="#FF0000">Oczywi¶cie uczciwy CA powinien |
| skasowaæ go, zaraz po utworzeniu</FONT>. W takim wypadku metoda pierwsza |
| <BR>spe³nia wszelkie wymogi. Sposób drugi prócz samych wad ma jedn± |
| acz ogromn± zaletê. Mianowicie klucz prywatny |
| <BR>klienta nigdy nie opuszcza jego komputera. Do wad mo¿na zaliczyæ |
| fakt ¿e has³o zabezpieczaj±ce klucz prywatny CA |
| <BR>znajduje siê na serwerze i to w dodatku w ¿aden sposób nie chronione. |
| Kolejn± wad± jest generowanie kompletnych |
| <BR>certyfikatów przez strone www, co mo¿e groziæ wykradzeniem klucza prywatnego. |
| Rozwi±zaniem mo¿e byæ sk³adowanie |
| <BR>requestów w bazie danych a nastpnie rêczna ich obróbka przez administratora. |
| Reasumuj±c, sposób drugi nale¿y |
| <BR>potraktowaæ jako demonstracje metody któr± mo¿na przeæwiczyæ przed |
| napisaniem porz±dnych skryptów. |
| <BR> <B><FONT SIZE=+1></FONT></B> |
| |
| <P><B><FONT SIZE=+1>Tajemniczy prze³±cznik -v 3 w stunnelu</FONT></B> |
| |
| <P>Stunnel posiada trzy tryby weryfikacji klienta. |
| <BR>Pierwszy opcja <B><FONT SIZE=+1>-v 1</FONT></B> oznacza ¿e nale¿y spróbowaæ |
| zweryfikowaæ osobê nawi±zuj±c± po³±czenie czyli uzyskaæ jej |
| <BR>ceryfikat. Je¶li operacja ta siê nie powiedzie, mimo wszystko dostêp |
| do serwera bêdzie zapewniony. |
| <BR>Prze³±cznik <B><FONT SIZE=+1>-v 2</FONT></B> nakazuje stunnelowi zweryfikowaæ |
| klienta. Je¶li u¿ytkownik nie posiada certyfikatu lub certyfikat |
| <BR>jest niewa¿ny, niew³a¶ciwy czy te¿ nie posiadamy certyfikatu CA którym |
| podpisany jest certyfikat klienta |
| <BR><FONT SIZE=-2>(straszny jest ten jêzyk polski)</FONT> nawi±zanie po³±czenia |
| z serwerem bêdzie niemo¿liwe. I wreszcie opcja <B><FONT SIZE=+1>-v 3</FONT></B> |
| nakazuj±ca |
| <BR>stunnelowi zweryfikowaæ klienta a tak¿e poszukaæ jego certyfikatu w |
| naszej lokalnej bazie. |
| <BR>Dzieki opcji -v 3 mo¿emy stworzyæ bardzo selektywny dostêp do us³ug |
| oferowanych przez serwer, unikaj±c generowania du¿ych ilo¶ci certyfikatów. |
| <FONT COLOR="#FF0000">Uwaga ogólna: do poprawnej weryfikacji klienta KONIECZNE |
| jest posiadanie certyfikatu CA którym podpisany jest sprawdzany certyfikat</FONT>. |
| Bez tego stunnel nie jest wstanie przeprowadziæ poprawnej autoryzacji klienta. |
| Próba taka koñczy siê b³êdami "<B>VERIFY ERROR: self signed certificate |
| for .....</B>" oraz "<B>SSL_accept: error:140890B1:SSL routines:</B> <B>SSL3_GET_CLIENT_CERTIFICATE:no |
| certificate returned</B>". A teraz przyk³ad praktyczny: chcemy aby do https |
| bêd±cym na <B>porcie 444</B> mia³y dostêp wszystkie osoby maj±ce certyfikaty |
| natomiast |
| <BR>do do https na <B>porcie 445</B> dostêp mia³ tylko Jan Kowalski. Pierwsz± |
| czynno¶ci± jak± nale¿y wykonaæ jest skopiowanie |
| <BR>certyfikatu CA do katalogu <B>/usr/local/ssl/certs</B> (default cert |
| area), nastêpnie w tym katalogu nale¿y utworzyæ |
| <BR>podkatalog o nazwie <B>mytrusted</B>, poczym skopiowaæ do niego |
| certyfikat klienta czyli jan.pem. <A HREF="#usuwanie"><B>Uwaga</B>: z pliku |
| jan.pem</A> |
| <BR><A HREF="#usuwanie"><B>MUSISZ</B> usun±æ klucz prywatny</A> !!! Czyli |
| to co siê znajduje miêdzy |
| |
| <P>-----BEGIN RSA PRIVATE KEY----- |
| <BR>....... |
| <BR>-----END RSA PRIVATE KEY----- |
| |
| <P>³±cznie z powy¿szymi liniami. Nastêpnie w katalogach <B>/usr/local/ssl/certs</B> |
| i <B>/usr/local/ssl/certs/mytrusted</B> nale¿y |
| <BR>wykonaæ polecenie |
| <BR><B>/usr/local/ssl/bin/c_rehash ./</B> |
| <BR>Teraz kolej na uruchomienie stunnela: |
| <BR><B>stunnel -d 444 -r 80 -v 2</B> |
| <BR>oraz |
| <BR><B>stunnel -d 445 -r 80 -v 3</B> |
| <BR>Netscapem nale¿y po³±czyæ sie z https://localhost:444/ a po pytaniu |
| o certyfikat przedstawiæ certyfikat nale¿±cy |
| <BR>do pigwy. Dostêp do serwera bêdzie zapewniony. Czynno¶c tê nale¿y powtórzyæ |
| przedstawiaj±c siê za drugim razem |
| <BR>certyfikatem Jana Kowalskiego. Po³±czenie tak¿e bêdzie zrealizowane. |
| W przypadku https://localhost:445/ wej¶cie |
| <BR>na serwer bêdzie zapewnione tylko po wylegitymowaniu siê certyfikatem |
| Jana Kowalskiego. Po kazdej zmianie w |
| <BR>katalogu /usr/local/ssl/certs/mytrusted nale¿y wykonaæ komendê c_rehash |
| ./ i zrestartowaæ stunnela. |
| <BR> |
| </BODY> |
| </HTML> |