Configurando OpenSSL
Crear el fichero de configuración de OpenSSL
Sección titulada «Crear el fichero de configuración de OpenSSL»Edite el fichero /etc/ssl/openssl.cnf
$ 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"Crear la Autoridad de Certificación (CA)
Sección titulada «Crear la Autoridad de Certificación (CA)»Cree la estructura de carpetas para almacenar los certificados:
$ 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/caCree las claves pública y privada autofirmadas para nuestra propia Autoridad de Certificación (en el ejemplo son válidas durante 10 años). Necesitará especificar los datos del certificado y una contraseña de cifrado, y el proceso generará dos ficheros:
$ 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.crtCambie los permisos de la clave:
$ chmod 600 /opt/met-ca/private/ca.keyCrear el certificado de Apache
Sección titulada «Crear el certificado de Apache»Cree un par de claves. Necesitará especificar una contraseña y los datos del certificado. Esto creará el fichero de clave (server.key) y una solicitud de certificado (server.pem).
$ openssl req -new -sha1 -newkey rsa:2048 -nodes -keyout server.key -out server.pemLa CA debe firmar la solicitud de certificado. Copie server.pem al directorio de solicitudes y fírmelo.
$ openssl ca -config /etc/ssl/openssl.cnf -policy policy_anything -extensions ssl_server -out requests/server-signed.pem -infiles requests/server.pemApache espera el formato PEM; es obligatorio convertir a este formato:
$ openssl x509 -in requests/server-signed.pem -out requests/server.crtConfiguración de Apache
Sección titulada «Configuración de Apache»Copie server.crt y server.key en /etc/apache2/ssl (si la carpeta SSL no existe, créela). Cambie los permisos de los ficheros (server.key solo debe poder leerlo el usuario root; server.crt debe poder leerlo cualquiera):
$ chmod 400 server.key$ chmod 444 server.crtSi Apache no está escuchando en el puerto SSL, actívelo configurando /etc/apache2/ports.conf:
Listen 80Listen 443Active el soporte SSL de Apache:
$ apt-get install libapache-mod-sslIndique a Apache que cargue los módulos SSL:
$ a2enmod sslConfigure el sitio web:
Enlace el fichero default-ssl para activar SSL:
$ ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/default-sslEdite /etc/apache2/sites-available/default-ssl (active el motor SSL y establezca SSLCertificateFile y SSLCertificateKeyFile)
SSLEngine onSSLCertificateFile /etc/apache2/ssl/server.crtSSLCertificateKeyFile /etc/apache2/ssl/server.keyCrear el certificado de usuario:
Para crear certificados y firmarlos con la CA, primero cree el par de claves. Necesitará especificar una contraseña y los datos del certificado. Esto creará una clave (user.key) y una solicitud de certificado (user.pem):
$ openssl req -new -sha1 -newkey rsa:2048 -nodes -keyout user.key -out user.pemCon la CA, necesita firmar los certificados:
$ 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.pemConvierta el certificado a PKCS#12 para que el navegador lo reconozca
$ openssl pkcs12 -export -clcerts -in user-signed.pem -inkey usuario.key -out user.p12Los ficheros user-signed.pem, user.pem y user.key pueden eliminarse
$ wipe user-signed.pem user.key user.pemRevocación de certificados
Sección titulada «Revocación de certificados»Si el servidor se ha visto comprometido, el certificado debe ser revocado por la CA. Para revocar un certificado, compruebe el número de serie en /opt/ca/index.txt.
$ openssl ca -config /etc/ssl/openssl.cnf -revoke newcerts/<serial-number>.pemCree una lista de certificados revocados (CRL)
$ openssl ca -config /etc/ssl/openssl.cnf -gencrl -crlexts crl_ext -md sha1 -out crl.pemPara enviar la lista al navegador, debe convertirse al formato DER:
$ openssl crl -in crl.pem -out ca.crl -outform DERYa puede enviarse al navegador.
Añadir la CRL a Apache
Sección titulada «Añadir la CRL a Apache»Copie el fichero CRL a la carpeta SSL de Apache:
$ cp /tmp/crl.pem /etc/apache2/ssl/ca.crlModifique el fichero /etc/apache2/sites-available/default-ssl y añada SSLCARevocationFile:
SSLCARevocationFile /etc/apache2/ssl/ca.crlReinicie el servicio Apache.