Ir al contenido
Otras versiones

Cargando…

Configurar OpenSSL

Crear el archivo de configuración de OpenSSL

Sección titulada «Crear el archivo de configuración de OpenSSL»

Edite el archivo /etc/ssl/openssl.cnf

Ventana de terminal
$ vim /etc/ssl/openssl.cnf
RANDFILE = $ENV::SSLDIR/.rnd
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /opt/ca
certs = $dir/certs
new_certs_dir = $dir/newcerts
crl_dir = $dir/crl
database = $dir/index.txt
private_key = $dir/private/ca.key
certificate = $dir/ca.crt
serial = $dir/serial
crl = $dir/crl.pem
RANDFILE = $dir/private/.rand
default_days = 365
default_crl_days = 30
default_md = sha1
preserve = no
policy = policy_anything
name_opt = ca_default
cert_opt = ca_default
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 2048
default_md = sha1
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
string_mask = nombstr
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (eg, YOUR name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64
[ usr_cert ]
basicConstraints = CA:FALSE
# nsCaRevocationUrl = https://url-to-exposed-clr-list/crl.pem
[ ssl_server ]
basicConstraints = CA:FALSE
nsCertType = server
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, nsSGC, msSGC
nsComment = "OpenSSL Certificate for SSL Web Server"
[ ssl_client ]
basicConstraints = CA:FALSE
nsCertType = client
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
nsComment = "OpenSSL Certificate for SSL Client"
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
[ v3_ca ]
basicConstraints = critical, CA:true, pathlen:0
nsCertType = sslCA
keyUsage = cRLSign, keyCertSign
extendedKeyUsage = serverAuth, clientAuth
nsComment = "OpenSSL CA Certificate"
[ crl_ext ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
nsComment = "OpenSSL generated CRL"

Cree la estructura de carpetas que contendrá los certificados:

Ventana de terminal
$ mkdir /opt/met-ca
$ mkdir /opt/met-ca/certs
$ mkdir /opt/met-ca/crl
$ mkdir /opt/met-ca/newcerts
$ mkdir /opt/met-ca/private
$ mkdir /opt/met-ca/requests
$ touch /opt/met-ca/index.txt
$ echo “01” > /opt/ca/serial
$ echo “01” > /opt/ca/crlnumber
$ chmod 700 /opt/ca

Cree las claves pública y privada autofirmadas de nuestra propia Autoridad de Certificación (en el ejemplo es válida durante 10 años). Necesitaremos indicar los datos del certificado y la contraseña de cifrado, y el proceso generará dos archivos:

Ventana de terminal
$ openssl req -config /etc/ssl/openssl.cnf -new -x509 -days 3650 -sha1 -newkey rsa:2048 -keyout /opt/ca/private/ca.key -out /opt/ca/ca.crt

Cambie los permisos de la clave:

Ventana de terminal
$ chmod 600 /opt/met-ca/private/ca.key

Cree un par de claves. Necesitaremos indicar la contraseña y los datos de certificación. Se creará un archivo de clave (server.key) y una solicitud de certificación (server.pem).

Ventana de terminal
$ openssl req -new -sha1 -newkey rsa:2048 -nodes -keyout server.key -out server.pem

La CA debe firmar la solicitud de certificación. Copie server.pem a la solicitud de certificación y fírmela.

Ventana de terminal
$ openssl ca -config /etc/ssl/openssl.cnf -policy policy_anything -extensions ssl_server -out requests/server-signed.pem -infiles requests/server.pem

Apache necesitará un formato PEM; es obligatorio convertir a este formato:

Ventana de terminal
$ openssl x509 -in requests/server-signed.pem -out requests/server.crt

Copie server.crt y server.key en /etc/apache2/ssl (si no existe la carpeta ssl, créela). Cambie los permisos de los archivos (server.key solo debe poder leerlo el usuario root; server.crt debe tener permiso de lectura para todos):

Ventana de terminal
$ chmod 400 server.key
$ chmod 444 server.crt

Si Apache no está escuchando en el puerto SSL, habilítelo configurando /etc/apache2/ports.conf:

Listen 80
Listen 443

Habilite la compatibilidad de Apache con SSL:

Ventana de terminal
$ apt-get install libapache-mod-ssl

Configure Apache para que cargue los módulos SSL:

Ventana de terminal
$ a2enmod ssl

Configure el sitio web:

Enlace el archivo default-ssl para habilitar SSL:

Ventana de terminal
$ ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/default-ssl

Edite /etc/apache2/sites-availables/default-ssl (habilite el motor SSL y establezca SSLCertificateFile y SSLCertificateKeyFile)

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

Cree los certificados de usuario:

Para crear certificados y firmarlos con la CA, cree primero el par de claves. Necesitaremos indicar la contraseña y los datos de certificación. Se creará una clave (user.key) y una solicitud de certificación (user.pem):

Ventana de terminal
$ openssl req -new -sha1 -newkey rsa:2048 -nodes -keyout user.key -out user.pem

Firme los certificados con la CA:

Ventana de terminal
$ cp /tmp/usuario.pem /opt/ca/requests
$ openssl ca -config /etc/ssl/openssl.cnf -policy policy_anything -extensions [b]ssl_client[/b] -out requests/user-signed.pem -infiles requests/user.pem

Convierta el certificado a PKCS12 para que lo reconozca el navegador:

Ventana de terminal
$ openssl pkcs12 -export -clcerts -in user-signed.pem -inkey usuario.key -out user.p12

Los archivos user-signed.pem, user.pem y user.key pueden eliminarse  

Ventana de terminal
$ wipe user-signed.pem user.key user.pem

Si el servidor se ha visto comprometido, debe revocarse la CA. Para revocar un certificado, busque el número de serie en /opt/ca/index.txt.  

Ventana de terminal
$ openssl ca -config /etc/ssl/openssl.cnf -revoke newcerts/<serial-number>.pem

Cree una lista de certificados revocados (CRL).

Ventana de terminal
$ openssl ca -config /etc/ssl/openssl.cnf -gencrl -crlexts crl_ext -md sha1 -out crl.pem

Para enviarla al navegador, la lista debe convertirse al formato DER:  

Ventana de terminal
$ openssl crl -in crl.pem -out ca.crl -outform DER

Ahora envíe la lista al navegador.

Copie el archivo CRL a la carpeta SSL de Apache:  

Ventana de terminal
$ cp /tmp/crl.pem /etc/apache2/ssl/ca.crl

Modifique el archivo /etc/apache2/sites-available/default-ssl y añada SSLCARevocationFile:

SSLCARevocationFile /etc/apache2/ssl/ca.crl

Reinicie el servicio de Apache.