Generujemy certyfikat serwera WWW

2008-12-23 , Papiewski Łukasz , Tips & Tricks / Tipy

Generujemy plik CSR (certificate Sign Request) czyli wniosek o uzyskanie certyfikatu. W poniższym przykładzie tworzymy niezaszyfrowany, bez klucza oraz określonej liczby dni.

Możeliwe opcje dla opessl -req

SYNOPSIS
openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename]
       [-passin arg] [-out filename] [-passout arg] [-text] [-pubkey]
       [-noout] [-verify] [-modulus] [-new] [-rand file(s)] [-newkey
       rsa:bits] [-newkey dsa:file] [-nodes] [-key filename] [-keyform
       PEM|DER] [-keyout filename] [-[md5|sha1|md2|mdc2]] [-config
       filename] [-subj arg] [-multivalue-rdn] [-x509] [-days n]
       [-set_serial n] [-asn1-kludge] [-newhdr] [-extensions section]
       [-reqexts section] [-utf8] [-nameopt] [-batch] [-verbose] [-engine
       id]

openssl req -new -nodes -config /etc/ssl/openssl.cnf > server.csr

 

$ openssl req -new -nodes  -config /etc/ssl/openssl.cnf > server.csr
Generating a 1024 bit RSA private key
....++++++
.......++++++
writing new private key to 'privkey.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:województwo
Locality Name (eg, city) []: Miasto
Organization Name (eg, company) [Internet Widgits Pty Ltd]: nazwa firmy
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []: domena.pl
Email Address []: email@domena.pl

Wygenerowany plik csr może (lol) np. wyglądać tak:

$ cat server.csr 
-----BEGIN CERTIFICATE REQUEST-----
MIIB7DCCAVUCAQAwgY4xCzAJBgNVBAYTAlBMMRAwDgYDVQQIEwdsb2R6a2llMQ0w
CwYDVQQHEwRMb2R6MSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQx
GTAXBgNVBAMTEHN2bi5wYXBpZXdza2kucGwxIDAeBgkqhkiG9w0BCQEWEXBhcGlA
cGFwaWV3c2tpLnBsMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4xr6KBwx+
QinbNqr2EDBIbqRuE7/nujTzTSdagBJIjdQ/usL/SR/nEorqUkSKdbDYYY43wCAl
DXIMBoyq9zCQ7cahP7Tuv/NlpqFimTclRtWtGdhGoH/CUv1T/FsxINeircLpGOwA
Dpdd/hBVhQEKCOGydfg6oL+Vt0bFwRyShQIDAQABoB0wGwYJKoZIhvcNAQkCMQ4T
DHBhcGlld3NraS5wbDANBgkqhkiG9w0BAQUFAAOBgQCxqDH0j36z8siTRdhnO1y9
lvwOFWc6JjzyqBDvHh2jN9mqtPq3oaMf0U1tZuaeRLjonBbX7Z5mn5wGmb/TTMer
9fWQQlk52gjhkdZHRVzyvanN0ph8hH0Mq9l5oPeVdbix7Kq1lA8Ip97yjWZ2ceNI
IDn6OpoDClsXHVqC2ps/HA==
-----END CERTIFICATE REQUEST-----

Automatycznie tworzy się także klucz prywatny privkey.pem z podobnymi krzaczkami.

Dalej podpisujemy własnoręcznie.

$ openssl x509 -req -days 365 -in server.csr -signkey privkey.pem  -out server.crt
Signature ok<br />subject=/C=PL/ST=lodzkie/L=Lodz/O=Internet Widgits Pty Ltd/CN=svn.papiewski.pl/
emailAddress=papi@papiewski.pl
Getting Private key
 
$ cp privkey.pem server.key

Taki wygenerowany certyfikat możemy użyć np. w konfiguracji Apache i SSL

# zamienić/dodać w  /etc/apache/extra/http-ssl.conf (<-przykładowo)
SSLCertificateFile "/etc/apache/server.crt"
SSLCertificateKeyFile "/etc/apache/server.key"

Własnoręcznie podpisane certyfikaty generują ostrzerzenie przy pierwszym wyświetleniu. Przed zaakceptowaniem warto odwołać się do informacji w nim umieszczonym (opcja zobacz certyfikat) i tak zweryfikować.

Cytaty

- Simplicity is the ultimate sophistication. - Leonardo da Vinci,
- Popularny człowiek wzbudza zawiść potężnych - Thufir Hawat o Leto Atrydzie (na Kaladanie),
- Szczęście następuje po smutku, a smutek po szczęściu; człowiek jest naprawdę wolny, gdy przestaje rozróżniać między smutkiem a szczęściem, między dobrem a złem - Aforyzmy buddyjskie.