Generarea de CSR-uri din linie de comanda

La jobul curent ma vad adesea in situatia de a genera CSR-uri (certificate signing request) pentru diverse certificate SSL, adesea cu diferite pretentii pt. campurile care trebuie specificate de certificat. In timp am produs un template pt. openssl care sa acopere toate aceste situatii:

## openssl template for CSR generation
## IMPORTANT! If you want to leave blank one or more variables, delete or comment the line
[ req ]
default_bits           = 2048
default_keyfile        = secure.example.com.KEY.pem
distinguished_name     = req_distinguished_name
attributes             = req_attributes
prompt                 = no

#for subjectAltName
req_extensions        = v3_req

[ req_distinguished_name ]

# CN = the name of the domain - required
CN = store.example.com
# C = 2-letter country code ( http://tinyurl.com/2crunt )
C = RO
# ST = state
ST = Bucharest
# L = city
L = Bucharest
# O = company name
O = Example, Inc.
# OU = organization unit
OU = Web Security

streetAddress = 1234 Highway Drive
postalCode = 98765

[v3_req]
#warning, it must include the CN as well!
subjectAltName = DNS:name1,DNS:name2

#emailAddress           = webmaster.example.com

[ req_attributes ]
#challengePassword      =

Se copiaza acest template si se editeaza dupa gust si nevoi, atentie ca openssl comenteaza daca vede o variabila goala, asa ca daca nu ai nevoie sa setezi un camp, se scoate cu totul. Pt. certificate care contin mai multe nume (de exemplu sa mearga si pe secure.example.com si pe secure2.example.com) trebuie activat campul subjectAltName din sectiunea v3_req si neaparat trebuie inclus si numele din CN, pentru ca are precedenta (cel putin pentru clientii SSL pe care i-am testat).

Dupa ce e gata template-ul (salvat ca example.cfg in acest exemplu), se ruleaza comanda:

openssl req -new -nodes -out secure.example.com.CSR.pem -config example.cfg

Asta va produce un fisier CSR si unul KEY care contin CSR-ul (care e public) si cheia (care e privata - a se pazi cu mare atentie!). CSR-ul se da la CA, care il semneaza si produce un certificat (eu le tin in fisiere cu nume terminate in CRT.pem).

Pentru a verifica daca o cheie si un certificat sau un CSR sunt compatibile, se pot rula comenzile urmatoare, comparandu-se modulul cheii:

openssl rsa -in name.KEY.pem -noout -modulus
openssl x509 -in name.CRT.pem -noout -modulus
openssl req -in name.CSR.pem -noout -modulus