Cómo crear una autoridad de certificación (CA) en Ubuntu 20.04
La Autoridad de Certificación (CA) es una entidad responsable de emitir certificados digitales para que la comunicación sea segura. Actúa como un tercero de confianza para el propietario del certificado y la parte que confía en el certificado.
La entidad de la autoridad de certificación puede ser pública o privada. Las CA públicas se usan comúnmente para verificar la identidad de sitios web y las CA privadas se usan para generar certificados para una VPN de cliente a sitio, usuarios, servidores internos o programas y servicios individuales dentro de su infraestructura, como servidores web locales.
En este tutorial, aprendemos cómo crear una autoridad de certificación (CA) privada en Ubuntu 20.04 . Aquí estamos usando la utilidad CLI easy-rsa para construir y administrar el servidor CA.
Prerrequisitos
- Un nodo con Ubuntu 20.04 para alojar CA Server
- Un usuario con privilegio sudo
Paso 1: actualiza tu sistema
Primero, actualice su sistema Ubuntu, ejecute el siguiente comando:
apt update
Puede omitir este paso si está instalando easy-rsa desde el repositorio oficial.
Paso 2: Instale Easy-RSA en el servidor de CA
Easy-RSA es una herramienta de línea de comandos que facilita significativamente el establecimiento de una autoridad de certificación (CA) y la gestión de certificados. Genera una clave privada y un certificado raíz público.
Easy-RSA está disponible en el repositorio de apt predeterminado. Para tener la última versión, instale desde el repositorio oficial easy-rsa GitHub .
Descargue la herramienta de administración Easy-RSA PKI de Github:
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
Aquí han descargado la versión 3.0.8 . Ahora movamos el archivo a la /opt
carpeta.
sudo mv EasyRSA-3.0.8.tgz /opt
Ahora cambie el directorio a /opt:
cd /opt
Ejecute el siguiente comando para descomprimir el archivo .tgz:
sudo tar xvf EasyRSA-3.0.8.tgz
Cambie el nombre del directorio usando el comando mv :
sudo mv EasyRSA-3.0.8 easy-rsa
Ahora haga que el usuario no root sea el propietario del directorio:
sudo chown -R franck:franck easy-rsa/
Restrinja el acceso al directorio PKI, solo para el propietario:
sudo chmod 700 easy-rsa
Paso 3: configurar el servidor CA
Aquí configuraremos el directorio de infraestructura de clave pública y crearemos un certificado público / privado para el servidor CA.
Ahora cambie el directorio a easy-rsa que se creó anteriormente:
cd easy-rsa
Crearemos un vars
archivo que se utilizará para almacenar la información de la organización.
$ cp vars.example vars
Ahora agregue la información de la organización al final del archivo
$ vim vars
set_var EASYRSA_REQ_COUNTRY "CM"
set_var EASYRSA_REQ_PROVINCE "Centre"
set_var EASYRSA_REQ_CITY "Yaounde"
set_var EASYRSA_REQ_ORG "LINUXSHARE"
set_var EASYRSA_REQ_EMAIL "admin@linuxshare.com"
set_var EASYRSA_REQ_OU "Com"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
Ahora inicializaremos el directorio de Infraestructura de clave pública:
$ ./easyrsa init-pki
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /opt/easy-rsa/pki
Para generar el par de claves pública y privada raíz para el servidor de CA, escriba:
$ ./easyrsa build-ca
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
read EC key
writing EC key
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.
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/opt/easy-rsa/pki/ca.crt
Se le pedirá que ingrese una frase de contraseña para el par de claves en cualquier momento que necesite firmar o revocar un certificado. También se le pedirá el Nombre común (CN) de su CA, puede usar el predeterminado si lo desea.
La operación creará dos archivos principales:
- El archivo de archivo de certificado público
ca.crt
que los servidores y los clientes usarán para verificar que están en el mismo perímetro de confianza - El archivo de clave privada
ca.key
en elpki/private
directorio que la CA usa para firmar los certificados de los servidores y los clientes.
Paso 4: Importar certificado público de CA
Ahora que tenemos el certificado público generado, necesitamos importarlo a otro servidor.
Inicie sesión en el servidor en el que desea importar el certificado, luego realice una copia remota del ca.crt
archivo desde el servidor de CA.
scp franck@X.Y.Z.T:/opt/easy-rsa/pki/ca.crt
The authenticity of host 'X.Y.Z.T (X.Y.Z.T)' can't be established.
ECDSA key fingerprint is SHA256:ffUgP5/d0Z3miOKqxBVoF9JbFvIZFs/gxr7ESBZ0kmQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '139.177.204.145' (ECDSA) to the list of known hosts.
franck@X.Y.Z.T's password:
ca.crt
100% 749 2.4KB/s 00:00
Mueva el archivo de certificado al /usr/local/share/ca-certificates/
directorio:
sudo mv ca.crt /usr/local/share/ca-certificates/
Ahora importe el certificado del servidor CA utilizando el siguiente comando:
sudo update-ca-certificates
Updating certificates in /etc/ssl/certs…
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d…
done.
Con eso, su servidor ahora confiará en los certificados que han sido firmados por su servidor CA.
Paso 5: cree la solicitud de certificado del servidor y la clave privada
Podemos crear algunas solicitudes de firma de certificado (CSR) en un servidor diferente para que nuestra CA firme esas solicitudes.
Usaremos OpenSSL para crear un archivo CSR. Si OpenSSL no está instalado, use el siguiente comando para instalarlo:
sudo apt install openssl
Cree un directorio llamado server1-csr para mantener la CSR y la clave privada
mkdir server1-csr
Cambiar al directorio server1-csr
cd server1-csr
Ahora genere la clave privada usando OpenSSL:
openssl genrsa -out server1.key
Generating RSA private key, 2048 bit long modulus (2 primes)
..........+++++
..................................................+++++
e is 65537 (0x010001)
Puede generar el CSR correspondiente utilizando la clave generada:
$ openssl req -new -key server1.key -out server1.req
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]:CM
State or Province Name (full name) [Some-State]:CE
Locality Name (eg, city) []:Yaounde
Organization Name (eg, company) [Internet Widgits Pty Ltd]:LinuxShare
Organizational Unit Name (eg, section) []:Tech-B
Common Name (e.g. server FQDN or YOUR name) []:server1
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Ahora necesita copiar el archivo CSR al servidor de CA:
$ scp server1.req scp franck@X.Y.Z.T:/tmp/server1.req
Paso 6: Firme la CSR del servidor en el servidor de CA
La CSR generada debe estar firmada por el servidor de CA. Para ese primer paso al directorio easy-rsa para importar la solicitud de firma de certificado del servidor.
./easyrsa import-req /opt/sign-cert/server1.req server1
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
The request has been successfully imported with a short name of: server1
You may now use this name to perform signing operations on this request.
Ahora firme el CSR con el siguiente comando:
./easyrsa sign-req server server1
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 825 days:
subject=
countryName = CM
stateOrProvinceName = CE
localityName = Yaounde
organizationName = LinuxShare
organizationalUnitName = Tech-B
commonName = server1
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/easy-rsa/pki/easy-rsa-161486.BI2HwH/tmp.lIqZoF
Enter pass phrase for /opt/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'CM'
stateOrProvinceName :ASN.1 12:'CE'
localityName :ASN.1 12:'Yaounde'
organizationName :ASN.1 12:'LinuxShare'
organizationalUnitName:ASN.1 12:'Tech-B'
commonName :ASN.1 12:'server1'
Certificate is to be certified until Jan 5 16:57:26 2024 GMT (825 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /opt/easy-rsa/pki/issued/server1.crt
En el resultado, puede ver el certificado emitido en el directorio / opt / easy-rsa / pki / Published /. También puede verificar el certificado enumerándolo:
$ ls -l /opt/easy-rsa/pki/issued
Producción:
total 4
-rw------- 1 franck franck 3996 Oct 2 16:57 server1.crt
Con todos esos pasos, puede administrar sus certificados usted mismo para sus servidores internos. Con su servidor CA, puede firmar los certificados para sus servidores web o para un túnel VPN, por ejemplo, con OpenVPN.
Nota: Por razones de seguridad, se recomienda no ejecutar ningún otro servicio en un servidor CA. Solo debe usarse para importar, firmar y revocar solicitudes de certificado como servidor independiente.
Conclusión
En este tutorial, aprendimos cómo crear una autoridad de certificación (CA) privada en Ubuntu 20.04. Gracias por leer, proporcione sus comentarios y sugerencias en la sección de comentarios.