Use OpenSSL para crear un certificado para usted mismo para implementar su propio servidor HTTPS

Para un sitio web público, si desea cifrar la comunicación durante la visita del usuario al sitio web y permitir que los usuarios accedan a él mediante HTTPS, el sitio web en sí debe tener su propia clave privada y un certificado emitido por una organización de confianza. Esta es una arquitectura técnica que usa acceso HTTPS.

Un certificado emitido por una organización de confianza requiere dinero. En algunos casos, podemos emitir certificados por nosotros mismos. Por ejemplo, los desarrolladores desarrollan sus propias pruebas; por ejemplo, para uso interno de la empresa en lugar de acceso público a Internet.

En la  publicación de blog que desarrollé en  Delphi basado en WebBroker basado en Indy o en un servidor WebService compatible con https , hablé sobre el uso de mi propia clave privada y certificado para el programa Web Server y el programa WebServices de Delphi Indy.

Hablemos brevemente sobre los métodos específicos de usar OpenSSL para crear claves privadas y certificados.

Este artículo hace referencia: Autoridad de certificación OpenSSL

--------------------------------------

concepto:

1. Use el navegador para usar https://website.com/ para visitar un sitio web. En comparación con el método simple http://website.com/, la comunicación http no está encriptada. Use la herramienta de captura de paquetes Sniffer u otra El contenido de la comunicación es interceptado por el método y se puede leer directamente. En la capa de comunicación, https es una comunicación cifrada basada en SSL. El interceptor no puede descifrar ni leer el contenido de la comunicación interceptada.

2. La comunicación encriptada SSL se basa en tecnología de encriptación asimétrica. Específicamente para un sitio web que admite acceso HTTPS, su sitio web debe tener su propia clave privada para el cifrado asimétrico y un certificado que contenga la clave pública para el cifrado asimétrico.

2.1. El certificado es emitido por una organización confiable (como Google o Microsoft o una organización que se especializa en emitir certificados); por lo tanto, el cliente puede confiar en que la clave pública en el certificado es de hecho el sitio web, en lugar de ser falsificada por un atacante.

2.2 ¿Cómo determina el cliente que el certificado es confiable? Porque la información contenida en el certificado se puede rastrear hasta el certificado raíz de la organización que emitió el certificado. El certificado raíz se agrega al sistema operativo Windows como certificado de confianza. Por supuesto, los usuarios también pueden eliminar manualmente la confianza de este certificado raíz.

3. Suponiendo que una persona que necesita visitar un sitio web debe proporcionar un certificado firmado para probar su identidad (este tipo de sitio web generalmente no es para el público en general), entonces un usuario común también puede tener su propia clave privada y certificado.

5. Cadena de confianza de certificados: como organización de confianza que se especializa en la emisión de certificados, su propio certificado raíz y su clave privada no suelen utilizarse para emitir certificados para los usuarios. La seguridad de esta clave privada raíz es muy importante y, por lo general, no se utiliza. Por lo tanto, la clave privada raíz y el certificado raíz se utilizan para crear y emitir algunos certificados intermedios. Luego, el certificado intermedio y la clave privada se utilizan para emitir el certificado requerido por el usuario. Este rol similar al [intermediario] puede tener múltiples niveles. Esto constituye una cadena de confianza. Es decir, un certificado final, que se remonta al certificado raíz. Por lo tanto, para verificar si un certificado es legal, no requiere una conexión a Internet para verificarlo. Siempre que haya un certificado raíz de confianza en el sistema del usuario, se puede verificar la validez del certificado.

5.1 Sin embargo, si se revoca un certificado (por ejemplo, se roba su clave privada), debe verificarlo en línea. La autoridad emisora ​​del certificado tiene un servidor dedicado a proporcionar dichas consultas. Por supuesto, este es un protocolo estándar y el sistema informático completará este proceso automáticamente.

6. Los usuarios pueden crear su propia clave privada y una CSR (solicitud de firma de certificado) para la firma de certificado. De esta forma, el usuario conserva su clave privada y solo necesita enviar la CSR a la autoridad emisora ​​del certificado. La autoridad emisora ​​del certificado firmará esta CSR en un certificado real. De esta forma, la clave privada del usuario no será vista por ningún tercero.

sustantivo:

1. OpenSSL: OpenSSL es una biblioteca de cifrado de código abierto y gratuita que proporciona una serie de herramientas de línea de comandos para procesar certificados digitales. Algunas de estas herramientas se pueden utilizar para actuar como autoridad de certificación.

2. CA: autoridad certificadora, es una entidad que firma certificados digitales.

3. La clave privada se llama Clave y la clave raíz es el nombre de archivo correspondiente: ca.key.pem, la clave pública es el certificado y el nombre de archivo correspondiente (certificado raíz) ca.cert.pem; El certificado aquí significa certificado.

4. CSR: solicitud de firma de certificado. El tercero crea la clave privada y luego envía la solicitud de firma del certificado a la CA.

 

 

Práctica:

Configuración del entorno:

Utilizo OpenSSL en el subsistema Linux de Windows 10. El subsistema Linux de mi Windows 10 tiene instalado Ubuntu. Una vez completada la instalación, OpenSSL ya está en él. Si no es así, hay muchos artículos sobre cómo instalar OpenSSL en Linux. O instale la versión Win de OpenSSL directamente en Windows. Supongo que la operación de la línea de comandos debería ser la misma.

En resumen, inicie Windows PowerShell e ingrese el comando bash dentro para ingresar a Linux. Entonces puede ejecutar OpenSSL directamente en él.

operando:

1. Cree una clave privada raíz y un par de certificados

1. Prepare el directorio de trabajo. Creé un directorio llamado ca bajo el usuario actual. En Windows, en realidad está en el directorio del usuario actual de Windows.

2. Cree 3 carpetas en el directorio ca:

mkdir certs crl newcerts privado

 

3. Cree dos archivos en el directorio ca e ingrese el comando: ( Nota: la ruta actual de todos los comandos a continuación es el directorio ca )

3.1. toque index.txt

3.2. echo 1000> serial

4. Cambie los permisos del directorio privado: chmod 700 private

5. Cree una clave raíz: ingrese el comando: openssl genrsa -aes256 -out private / ca.key.pem 4096 para crear una clave raíz. Después de copiar el comando anterior, haga clic derecho en la ventana de PowerShell con el mouse para pegarlo. Después de presionar Enter, se le pedirá que ingrese la contraseña. Ingrese una contraseña creada por usted mismo para crear una clave raíz.

5.1.La clave raíz es la clave privada de la raíz, su archivo es: ca.key.pem, en el directorio privado;

5.2. chmod 400 privado / ca.key.pem

5.3 Este archivo ca.key.pem está encriptado, y debe ingresar una contraseña cada vez que lo use. Esta contraseña es la contraseña que el sistema le solicita que ingrese cuando se crea.

6. Cree un certificado raíz: se requiere openssl.cnf para crear un certificado raíz, que es un archivo de configuración de texto.

6.1 En el enlace de referencia en la parte superior de este artículo, está la plantilla openssl.cnf Descárguela y úsela con modificaciones menores o sin cambios.

6.2 Coloque openssl.cnf en el directorio ca. Ingrese el siguiente comando:

openssl req -config openssl.cnf \

-key private/ca.key.pem \

-new -x509 -days 7300 -sha256 -extensions v3_ca \

-out certs/ca.cert.pem

 6.3. Durante el proceso de creación del certificado, encontré un mensaje de error: no se puede cargar la clave privada . La razón es que el sistema me solicita ingresar la contraseña de ca.key.pem durante la ejecución del comando, lo cual es causado por mi error de entrada.

6.4 Verifique el certificado recién creado: openssl x509 -noout -text -in certs / ca.cert.pem Puede ver el contenido del certificado. En este punto, se crean la clave privada raíz y el certificado raíz.

2. Cree un par de certificados intermedios

1. mkdir ca / ​​interval crea este directorio para almacenar certificados intermedios. Entonces, bajo el directorio ca, tenemos un directorio intermedio.

1.1. cd ca / ​​intermedio

1.2 mkdir certs crl csr newcerts private Crea 3 subdirectorios para el directorio intermedio. Parece que la estructura es la misma que la del directorio ca.

1.3. chmod 700 privado

1.4. Crear archivo: toque index.txt

1.5. Crear archivo: echo 1000> serial

1.6 echo 1000> crlnumber Este archivo se utiliza para almacenar la lista de revocación de certificados.

2. Cree la clave privada del intermediario, las siguientes operaciones están en el directorio ca:

2.1. Ejecute el siguiente comando para crear la clave privada (se le pedirá que ingrese la contraseña durante la ejecución del comando):

openssl genrsa -aes256 \

-out intermediate/private/intermediate.key.pem 4096 

2.2 chmod 400 intermedio / privado / intermedio.key.pem Este intermedio.key.pem es el archivo de clave privada del intermediario.

3. Realice el certificado del intermediario.

3.1 Primero prepare el archivo openssl.cnf que necesita el intermediario. Simplemente copie los archivos de la ca anterior al directorio intermedio.

3.2. Ejecute el siguiente comando para hacer un certificado CSR:

openssl req -config intermediate/openssl.cnf -new -sha256 \

-key intermediate/private/intermediate.key.pem \

-out intermediate/csr/intermediate.csr.pem

Al ejecutar el comando anterior, se le pedirá que ingrese la contraseña de la clave privada del intermediario. 

Cabe señalar aquí que al crear el certificado intermedio, en el archivo .cnf de configuración, A. La ubicación de 0.organizationName en el archivo de configuración debe ser el mismo nombre que el certificado raíz cuando el comando requiere que lo ingreses, tanto en mayúsculas como en minúsculas. No puede estar equivocado. B. El  commonName debe ser diferente del certificado raíz. Cuando se le pide que ingrese algunos nombres después de ejecutar el comando, commonName debe ser un nombre diferente al del certificado raíz.

3.3. Firmar el certificado intermedio con el certificado raíz:

openssl ca -config openssl.cnf -extensions v3_intermediate_ca \
      -days 3650 -notext -md sha256 \
      -in intermediate/csr/intermediate.csr.pem \
      -out intermediate/certs/intermediate.cert.pem

 

3.4. chmod 444 intermedio / certs / intermedio.cert.pem

3.5. Verifique este certificado intermedio:

openssl x509 -noout -text \
      -in intermediate/certs/intermediate.cert.pem

3.5 Cuando una aplicación (como un navegador web) intenta verificar un certificado firmado por una CA intermedia, también debe verificar el certificado intermedio con el certificado raíz. Para completar la cadena de confianza, cree una cadena de certificados de CA para presentar a la aplicación.

Para crear una cadena de certificados de CA, conecte el certificado intermedio y el certificado raíz juntos. Usaremos este archivo más adelante para verificar el certificado firmado por la CA intermedia.

Ejecute los siguientes comandos:

cat intermediate/certs/intermediate.cert.pem \
      certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem
	  chmod 444 intermediate/certs/ca-chain.cert.pem

3.6 Nuestro archivo de cadena de certificados debe contener el certificado raíz, porque ninguna aplicación cliente conoce el certificado todavía. Una mejor opción (especialmente en el caso de la administración de la intranet) es instalar un certificado raíz en cada cliente que necesite conectarse. En este caso, el archivo de cadena solo necesita contener su certificado intermedio.

 

3. Cree un par de certificados para el sitio web

El par de certificados que utiliza el sitio web se emite con un certificado intermedio. El proceso de producción es exactamente el mismo que los dos anteriores.

1. Cree una clave, la clave privada del sitio web:

 

openssl genrsa -aes256 \
      -out intermediate/private/www.myhost.net.key.pem 2048

1.1 Tenga en cuenta que -aes256 en la primera línea aquí es la contraseña de cifrado para esta clave. Cuando el sitio web carga el certificado por primera vez, se debe cargar la clave y se debe ingresar la contraseña. Si no desea ingresar la contraseña cuando el servidor web carga esta clave, no necesita la opción -aes256.

1.2 El control TIdServerIOHandlerSSLOpenSSL proporcionado por Indy de Delphi para usar el certificado OpenSSL tiene un evento OnGetPassword El programa puede ingresar la contraseña de la clave anterior aquí para que el programa use esta clave. 

1.3. chmod 400 intermedio / privado / mis.myhost.net.key.pem

 

2. Cree un certificado para el sitio web:

2.1. Ejecute el siguiente comando para crear el CSR del sitio web:

cd /root/ca
# openssl req -config intermediate/openssl.cnf \
      -key intermediate/private/mis.myhost.net.key.pem \
      -new -sha256 -out intermediate/csr/www.myhost.net.csr.pem

 2.2. Durante la ejecución del comando anterior, se le pedirá que ingrese un montón de información, como nombre, correo electrónico, etc. Debe tenerse en cuenta aquí que donde se ingresa el commonName, se debe ingresar la dirección del sitio web, y no debe ser la misma que el commonName ingresado al crear el certificado intermedio. El mismo no se puede crear correctamente.

2.3. Utilice la firma del certificado intermedio para el certificado de sitio web CSR para producir el certificado final que se utilizará:

openssl ca -config intermediate/openssl.cnf \
      -extensions server_cert -days 375 -notext -md sha256 \
      -in intermediate/csr/mis.myhost.net.csr.pem \
      -out intermediate/certs/mis.myhost.net.cert.pem

 2.4. chmod 444 intermedio / certs / mis.myhost.net.cert.pem

2.5. Verificación:

openssl x509 -noout -text \
      -in intermediate/certs/mis.myhost.net.cert.pem

En este punto, se completa un certificado utilizable.

Este certificado se puede utilizar para el acceso cifrado al sitio web En mi publicación de blog, también hablé sobre cómo hacer que los programas Delphi lo usen. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/pcplayer/article/details/108498115
Recomendado
Clasificación