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
$ 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 que contendrá 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 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:
$ 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 la certificación de Apache
Sección titulada «Crear la certificación de Apache»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).
$ openssl req -new -sha1 -newkey rsa:2048 -nodes -keyout server.key -out server.pemLa CA debe firmar la solicitud de certificación. Copie server.pem a la solicitud de certificación y fírmela.
$ openssl ca -config /etc/ssl/openssl.cnf -policy policy_anything -extensions ssl_server -out requests/server-signed.pem -infiles requests/server.pemApache necesitará un 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 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):
$ chmod 400 server.key$ chmod 444 server.crtSi Apache no está escuchando en el puerto SSL, habilítelo configurando /etc/apache2/ports.conf:
Listen 80Listen 443Habilite la compatibilidad de Apache con SSL:
$ apt-get install libapache-mod-sslConfigure Apache para que cargue los módulos SSL:
$ a2enmod sslConfigure el sitio web:
Enlace el archivo default-ssl para habilitar SSL:
$ ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/default-sslEdite /etc/apache2/sites-availables/default-ssl (habilite el motor SSL y establezca SSLCertificateFile y SSLCertificateKeyFile)
SSLEngine onSSLCertificateFile /etc/apache2/ssl/server.crtSSLCertificateKeyFile /etc/apache2/ssl/server.keyCree 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):
$ openssl req -new -sha1 -newkey rsa:2048 -nodes -keyout user.key -out user.pemFirme los certificados con la CA:
$ 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 PKCS12 para que lo reconozca el navegador:
$ openssl pkcs12 -export -clcerts -in user-signed.pem -inkey usuario.key -out user.p12Los archivos 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, debe revocarse la CA. Para revocar un certificado, busque 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 enviarla al navegador, la lista debe convertirse al formato DER:
$ openssl crl -in crl.pem -out ca.crl -outform DERAhora envíe la lista al navegador.
Añadir la CRL a Apache
Sección titulada «Añadir la CRL a Apache»Copie el archivo CRL a la carpeta SSL de Apache:
$ cp /tmp/crl.pem /etc/apache2/ssl/ca.crlModifique el archivo /etc/apache2/sites-available/default-ssl y añada SSLCARevocationFile:
SSLCARevocationFile /etc/apache2/ssl/ca.crlReinicie el servicio de Apache.