Xestión de certificados con OpenSSL
De Wiki do Pazo da Mercé
| Liña 1: | Liña 1: | ||
| - | Unha vez aclarados os conceptos básicos sobre os certificados dixitais, veremos que é o que imos facer no noso caso | + | |
| + | == Pasos para crear e xestionar os nosos propios certificados dixitais == | ||
| + | |||
| + | Unha vez aclarados os conceptos básicos sobre os certificados dixitais, veremos que é o que imos facer no noso caso. Os pasos que seguiremos son os seguintes: | ||
* Crearemos unha autoridade de certificación (CA). | * Crearemos unha autoridade de certificación (CA). | ||
* Crearemos unha solicitude de firma de certificado (CSR) para que a CA cree o certificado para o servidor (asociado ao nome DNS do servidor). | * Crearemos unha solicitude de firma de certificado (CSR) para que a CA cree o certificado para o servidor (asociado ao nome DNS do servidor). | ||
Revisión como estaba ás 06:42, 17 xaneiro 2011
Índice |
Pasos para crear e xestionar os nosos propios certificados dixitais
Unha vez aclarados os conceptos básicos sobre os certificados dixitais, veremos que é o que imos facer no noso caso. Os pasos que seguiremos son os seguintes:
- Crearemos unha autoridade de certificación (CA).
- Crearemos unha solicitude de firma de certificado (CSR) para que a CA cree o certificado para o servidor (asociado ao nome DNS do servidor).
- Xeraremos coa CA o certificado do servidor a partir da CSR.
- Teremos que copiar no equipo cliente o certificado da CA, para que cando reciba o certificado do servidor confíe nel ao estar emitido por esa CA.
Crear a Autoridade de Certificación (CA)
Primeiro, creamos os directorios para almacenar os certificados da CA e os ficheiros relacionados:
sudo mkdir /etc/ssl/CA sudo mkdir /etc/ssl/newcerts
Creamos dous ficheiros que a CA precisará para manter un número de serie que lle asignará a cada certificado e almacenar os certificados emitidos:
sudo sh -c "echo '01' > /etc/ssl/CA/serial" sudo touch /etc/ssl/CA/index.txt
No ficheiro de configuración da CA /etc/ssl/openssl.cnf, modificaremos os seguintes parámetros dentro da sección [ CA_default]:
dir = /etc/ssl/ # Where everything is kept database = $dir/CA/index.txt # database index file. certificate = $dir/certs/cacert.pem # The CA certificate serial = $dir/CA/serial # The current serial number
Creamos o certificado raíz para a propia CA, que será firmado por si mesma:
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
teremos que introducir un contrasinal para a CA (podemos poñer abc123.), e os datos do certificado. A continuación móstrase un exemplo para estes datos. É importante ter en conta que o que poñamos en Organization Name, deberá ser o mesmo valor que loo poñamos neste mesmo campo no certificado do servidor:
Generating a 1024 bit RSA private key ......++++++ ........++++++ unable to write 'random state' writing new private key to 'cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- 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]:ES State or Province Name (full name) [Some-State]:Galicia Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]:IES calquera Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:server00.iescalquera.local Email Address []:
e instalamos nos directorios da CA tanto a chave privada como o certificado creado:
sudo mv cakey.pem /etc/ssl/private/ sudo mv cacert.pem /etc/ssl/certs/
Xenerar a solicitude de firma do certificado (CSR)
En primeiro lugar teremos que crear unha chave para xerar a CSR, que será almacenada no ficheiro server.key. Teremos que introducir un contrasinal que será necesario para abrir esta chave (Como exemplo, podemos poñer o mesmo contrasinal abc123.):
openssl genrsa -des3 -out server.key 1024
O problema que temos con esta chave que acabamos de crear é que para poder abrila fai falta proporcionar o contrasinal que lle asignamos, e entón cada vez que se arrancara o servidor LDAP habería que introducir este contrasinal para que puidese ter acceso á chave privada do servidor, e isto supón un problema xa que calquera reinicio do servizo obriga a unha intervención manual. Por iso, o que imos facer é crear a partir da chave xa creada unha chave que non requira contrasinal:
openssl rsa -in server.key -out server.key.insecure
E gardamos en server.key a chave sen contrasinal, que será a que usaremos:
mv server.key server.key.secure mv server.key.insecure server.key
E por último creamos o CSR:
openssl req -new -key server.key -out server.csr
Introduciremos os datos necesarios para a solicitude do certificado, destacando o Organization Name, que deberá coincidir co que introducimos para a CA, e o Common Name, que deberá ser o nome DNS do servidor para o que emitiremos o certificado:
Country Name (2 letter code) [AU]:ES State or Province Name (full name) [Some-State]:Galicia Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]:IES calquera Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:server00.iescalquera.local Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
A CSR será almacenada no ficheiro server.csr, que xa pode ser enviada á autoridade de certificación para que xenere o certificado.
Xerar o certificado a partir do CSR
Ah!! pero se a autoridade de certificación tamén somos nós!! Ben, pois imos crear un certificado a partir da CSR:
sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf
Primeiro pedirásenos o contrasinal da CA (o que asignamos cando creamos o certificado da CA, no noso caso abc123.), e a continuación mostrásenos os datos do certificado que se vai xerar (tomados da CSR):
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Mar 4 23:25:23 2010 GMT
Not After : Mar 4 23:25:23 2011 GMT
Subject:
countryName = ES
stateOrProvinceName = Galicia
organizationName = IES calquera
commonName = server00.iescalquera.local
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
DF:FC:73:0D:36:B0:AF:DA:47:F7:E3:57:F9:41:FD:FF:88:AF:17:AE
X509v3 Authority Key Identifier:
keyid:01:C8:B2:AD:1B:B7:86:45:3E:CA:37:CC:C1:95:8E:A8:22:C3:D1:9B
Certificate is to be certified until Mar 4 23:25:23 2011 GMT (365 days)
E procedemos a asinar... (respondemos que si (y) ás dúas preguntas de confirmación).
Listo!! Copiamos todo o texto entre as liñas -----BEGIN CERTIFICATE----- and ----END CERTIFICATE----- (incluíndo estas dúas liñas), e o pegamos no ficheiro server.crt. Por exemplo, este ficheiro pode conter algo así:
-----BEGIN CERTIFICATE----- MIICpzCCAhCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJFUzEQ MA4GA1UECBMHR2FsaWNpYTEVMBMGA1UEChMMSUVTIGNhbHF1ZXJhMSMwIQYDVQQD ExpzZXJ2ZXIwMC5pZXNjYWxxdWVyYS5sb2NhbDAeFw0xMDAzMDQyMzI1MjNaFw0x MTAzMDQyMzI1MjNaMFsxCzAJBgNVBAYTAkVTMRAwDgYDVQQIEwdHYWxpY2lhMRUw EwYDVQQKEwxJRVMgY2FscXVlcmExIzAhBgNVBAMTGnNlcnZlcjAwLmllc2NhbHF1 ZXJhLmxvY2FsMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/QWqoi12reBRA /3p6+KyWTAoN3XqLU8VaNhpAAP4LTRuuzeeCKxkPyj2QZk+rWehmqkqbwX6Zdrqi BSfeKuoRokTV7e2bbMJmaomEbvez5bwr7sDSXl2UyFhVyJWtQBkI8m2pkqjWt9Fn 2OotV+c43HNncXN3/mGoVwpE7OMivwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCG SAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4E FgQU3/xzDTawr9pH9+NX+UH9/4ivF64wHwYDVR0jBBgwFoAUAciyrRu3hkU+yjfM wZWOqCLD0ZswDQYJKoZIhvcNAQEFBQADgYEAVHDWexRWbz6nPWVA+x/4KaXA9KaE atZ1cu2Mep+29duZyAFcQEf4pivXCallmkmbAhurpUH61SLFHOb7YHl71EPLvru0 U3kDx48wSDGqBzdCKWhoh1SBrFryxlovEredZ44q/1AxldJ8py9r77e2kqJ7u+TC 6v0/CnJRUYvWZh0= -----END CERTIFICATE-----
Copiamos o certificado e a chave ao directorio de almacenamento da CA:
sudo cp server.crt /etc/ssl/certs sudo cp server.key /etc/ssl/private
