Configuring OpenSSL
Esta página aún no está disponible en tu idioma.
Create the OpenSSL Configuration File
Section titled “Create the OpenSSL Configuration File”Edit file /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"Create the Certification Authority (CA)
Section titled “Create the Certification Authority (CA)”Create the folder structure to hold certificates:
$ 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/caCreate public and private auto signed keys of our own Certification Authority (in the example it is valid for 10 years). We will need to specify certificate data, the password for encryption and the process will generate two files:
$ 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.crtChange key grants:
$ chmod 600 /opt/met-ca/private/ca.keyCreate Apache Certification
Section titled “Create Apache Certification”Create a pair of keys. We will need to specify the password and certification data. A file key (server.key) and certification request (server.pem) will be created.
$ openssl req -new -sha1 -newkey rsa:2048 -nodes -keyout server.key -out server.pemCA should sign the certification request. Copy server.pem to certification request and sign.
$ openssl ca -config /etc/ssl/openssl.cnf -policy policy_anything -extensions ssl_server -out requests/server-signed.pem -infiles requests/server.pemApache will need a PEM format, is mandatory to convert to this format:
$ openssl x509 -in requests/server-signed.pem -out requests/server.crtApache Configuration
Section titled “Apache Configuration”Copy server.crt and the server.key into /etc/apache2/ssl (if no SSL folder exists, create it). Change files grants (server.key should only be read by the root user, server.crt should have read permission granted to everyone):
$ chmod 400 server.key$ chmod 444 server.crtIf Apache is not listening to the SSL port, enable it configuring /etc/apache2/ports.conf:
Listen 80Listen 443Enable Apache SSL support:
$ apt-get install libapache-mod-sslSet Apache to load SSL modules:
$ a2enmod sslConfigure the website:
Link the default-ssl file to enable SSL:
$ ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/default-sslEdit /etc/apache2/sites-availables/default-ssl (enable SSL engine and set SSLCertificateFile and SSLCertificateKeyFile)
SSLEngine onSSLCertificateFile /etc/apache2/ssl/server.crtSSLCertificateKeyFile /etc/apache2/ssl/server.keyCreate user certificates:
To create certificates and sign with CA, first create the pair of keys. We will need to specify the password and certification data. A key (user.key) and certification request (user.pem) will be created:
$ openssl req -new -sha1 -newkey rsa:2048 -nodes -keyout user.key -out user.pemSign certificates with 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.pemConvert certificate to PKCS12 to be recognized by the browser:
$ openssl pkcs12 -export -clcerts -in user-signed.pem -inkey usuario.key -out user.p12The files user-signed.pem, user.pem and user.key can be deleted
$ wipe user-signed.pem user.key user.pemCertification Revocation
Section titled “Certification Revocation”If the server has been compromised the CA should be revocated. To revocate a certificate find the serial number at /opt/ca/index.txt.
$ openssl ca -config /etc/ssl/openssl.cnf -revoke newcerts/<serial-number>.pemCreat a list of certificates (CRL) to be revocated.
$ openssl ca -config /etc/ssl/openssl.cnf -gencrl -crlexts crl_ext -md sha1 -out crl.pemTo send it to the browser the list should be converted to DER format:
$ openssl crl -in crl.pem -out ca.crl -outform DERNow send the list to the browser.
Add CRL to Apache
Section titled “Add CRL to Apache”Copy the CRL file to the Apache SSL folder:
$ cp /tmp/crl.pem /etc/apache2/ssl/ca.crlModify /etc/apache2/sites-available/default-ssl file, add SSLCARevocationFile:
SSLCARevocationFile /etc/apache2/ssl/ca.crlRestart Apache service.