Proceso de comunicación del protocolo SSL y HTTPS de configuración de Nginx

I. Introducción

Conocimiento básico

1.1 Criptografía de clave pública

El criptosistema de clave pública se divide en tres partes, clave pública, clave privada y algoritmo de cifrado y descifrado. Su proceso de cifrado y descifrado es el siguiente:

Cifrado: Cifre el contenido (o texto explicativo) mediante un algoritmo de cifrado y una clave pública para obtener un texto cifrado. La clave pública es necesaria para el proceso de cifrado.

Descifrado: descifre el texto cifrado mediante el algoritmo de descifrado y la clave privada para obtener el texto sin formato. El proceso de descifrado requiere un algoritmo de descifrado y una clave privada. Tenga en cuenta que el contenido cifrado por la clave pública solo puede ser descifrado por la clave privada, es decir, el contenido cifrado por la clave pública no se puede descifrar sin conocer la clave privada.

La clave pública y el algoritmo del criptosistema de clave pública son públicos (por eso se llama criptosistema de clave pública) y la clave privada se mantiene en secreto. Todo el mundo utiliza la clave pública para cifrar, pero solo el titular de la clave privada puede descifrarla. En el uso real, una persona necesitada generará un par de claves públicas y privadas, publicará la clave pública para que otros la usen y se quedará con la clave privada.

1.2 algoritmos de clave simétrica

En un algoritmo de cifrado simétrico, la clave utilizada para el cifrado y la clave utilizada para el descifrado son las mismas. En otras palabras, tanto el cifrado como el descifrado utilizan la misma clave. Por lo tanto, si el algoritmo de cifrado simétrico debe garantizar la seguridad, la clave debe mantenerse en secreto, de modo que solo pueda ser conocida por la persona que la usa y no pueda ser revelada al mundo exterior. Esto es diferente del sistema de cifrado de clave pública anterior. En el sistema de cifrado de clave pública, la clave pública se utiliza para el cifrado y la clave privada para el descifrado. En el algoritmo de cifrado simétrico, se utiliza la misma clave tanto para el cifrado como para el descifrado, y no se hace distinción entre la clave pública y la clave privada Clave privada. La clave, generalmente una cadena o un número, se pasa al algoritmo de cifrado / descifrado durante el cifrado o descifrado. La clave pública y la clave privada mencionadas en el sistema de cifrado de clave pública anterior son las claves, la clave pública es la clave utilizada para el cifrado y la clave privada es la clave utilizada para el descifrado.

1.3 Algoritmos de clave asimétrica

En un algoritmo de cifrado asimétrico, la clave utilizada para el cifrado y la clave utilizada para el descifrado son diferentes. El criptosistema de clave pública mencionado anteriormente es un algoritmo de cifrado asimétrico. Su clave pública y clave privada no pueden ser iguales, es decir, la clave utilizada para el cifrado es diferente a la clave utilizada para el descifrado, por lo que es un cifrado no simétrico. algoritmo Algoritmo de cifrado simétrico.

1.4 Introducción a RSA

RSA es un criptosistema de clave pública, que ahora se usa ampliamente. Si está interesado en RSA en sí, puede consultar la introducción específica de RSA.

El criptosistema RSA es un criptosistema de clave pública en el que la clave pública es pública, la clave privada se mantiene en secreto y sus algoritmos de cifrado y descifrado son públicos. El contenido cifrado por la clave pública puede y solo puede ser descifrado por la clave privada, y el contenido cifrado por la clave privada puede y sólo puede ser descifrado por la clave pública. En otras palabras, el par de claves públicas y privadas de RSA se puede utilizar para el cifrado y el descifrado, y el contenido cifrado por una parte puede y solo puede ser descifrado por la otra parte.

1.5 Firma y cifrado

Cuando hablamos de cifrado, nos referimos a cifrar un determinado contenido, y el contenido cifrado también se puede restaurar mediante descifrado. Por ejemplo, ciframos un correo electrónico y el contenido cifrado se transmite en la red. Después de recibirlo, el destinatario puede restaurar el contenido real del correo electrónico mediante el descifrado.

Aquí es principalmente para explicar la firma, la firma consiste en agregar un fragmento de contenido después del mensaje, lo que puede demostrar que el mensaje no ha sido modificado, ¿cómo se puede lograr este efecto? Generalmente, se realiza un cálculo hash sobre la información para obtener un valor hash, tenga en cuenta que este proceso es irreversible, lo que significa que el contenido de la información original no se puede obtener a través del valor hash. Al enviar la información, cifre el valor hash como una firma y envíelo con la información. Después de recibir la información, el receptor recalculará el valor hash de la información y lo comparará con el valor hash adjunto a la información (después del descifrado). Si son consistentes, el contenido de la información no se ha modificado, porque el cálculo hash puede garantizar Un contenido diferente definitivamente obtendrá diferentes valores de hash, por lo que siempre que se modifique el contenido, el valor de hash calculado en función del contenido de la información cambiará. Por supuesto, las personas con malas intenciones también pueden modificar el contenido de la información y también modificar el valor hash para que puedan coincidir. Para evitar esto, el valor hash generalmente se cifra (es decir, una firma) y luego se envía con la información. Asegúrese de que este valor hash no se modifique.

 

Proceso de comunicación HTTPS

HTTPS es una versión segura de HTTP, que puede proteger cualquier comunicación transmitida en línea a través de conexiones SSL / TLS. En resumen, HTTPS = HTTP + SSL. Si desea establecer una conexión HTTPS, primero debe registrar un certificado SSL de una autoridad de certificación (CA) de confianza, organización Gworg. Después de instalar el certificado SSL, habrá una "S" después del HTTP en la barra de direcciones del sitio web, y habrá un símbolo de candado de seguridad verde.

El protocolo SSL (Secure Sockets Layer), y su sucesor, el protocolo TLS (Transport Layer Security), es un protocolo de seguridad que proporciona seguridad e integridad de datos para las comunicaciones de red.

1) El navegador envía una solicitud HTTPS al servidor;

2) El servidor debe tener un conjunto de certificados digitales, que puede realizar usted mismo o aplicar a la organización. La diferencia es que el certificado emitido por usted mismo debe ser verificado por el cliente antes de que pueda continuar accediendo a él, mientras que el el certificado aplicado por una empresa de confianza no aparecerá En la página, este conjunto de certificados es en realidad un par de claves públicas y privadas;

3) El servidor transmitirá la clave pública al cliente;

4) Una vez que el cliente (navegador) recibe la clave pública, verificará si es legal y válida. Si no es válida, habrá un recordatorio de advertencia. Si es válida, se generará y cifrará una cadena de números aleatorios. con la clave pública recibida;

5) El cliente transmite la cadena aleatoria cifrada al servidor;

6) Una vez que el servidor recibe la cadena aleatoria cifrada, primero la descifra con la clave privada (cifrado de clave pública, descifrado de clave privada), después de obtener esta cadena de números aleatorios, luego utiliza esta cadena de cadenas aleatorias para cifrar los datos transmitidos ( el cifrado es cifrado simétrico, el llamado cifrado simétrico, consiste en mezclar los datos y la clave privada, es decir, esta cadena aleatoria a través de un determinado algoritmo, de modo que a menos que se conozca la clave privada, no se pueda obtener el contenido de los datos) ;

7) El servidor transmite los datos cifrados al cliente;

8) Una vez que el cliente recibe los datos, los descifra con su propia clave privada, que es la cadena aleatoria;

9) Tanto el cliente como el servidor conocen la clave simétrica y la utilizan para cifrar al usuario final durante la sesión. (El diagrama de flujo se muestra a continuación)

                                                                                La comprensión de https y la implementación real de nginx 1

 

2.1  URL de acceso del cliente,

Uno es https: //www.domain.com / ... para acceder directamente a través del puerto 443 al servidor;

El otro es http: //www.domain.com / .... para acceder al puerto 80 al servidor y reescribir de nginx a https: //www.domain.com / ... para ir nuevamente al 443 al servidor ;

El servidor implementa nginx para monitorear los puertos 80 y 443, y los 80 se vuelven a convertir a 443. Este paso tiene una redirección adicional;

 

2. Genere un certificado SSL usted mismo

Si va a instalar un certificado SSL para Nginx, el módulo SSL no está compilado de forma predeterminada, debe usar el parámetro --with-http_ssl_module al compilar Nginx, y el módulo compilado requiere archivos de biblioteca OpenSSL, generalmente debe instalar software openssl y openssl-devel.

# cd /usr/local/src/nginx-1.12.2

# ./configure --prefix = / usr / local / nginx --with-http_ssl_module

# hacer

# hacer instalar

2.1 Generar clave privada con contraseña

Ingrese el directorio donde se encuentra nginx.conf. Después de instalar la fuente, el directorio de archivos es / usr / local / nginx / conf. Si se trata de una instalación de yum, el directorio de archivos es / etc / nginx. Después de ingresar al directorio, cree el directorio ssl_cert. La clave correspondiente se genera en el directorio, de la siguiente manera:

Copiar codigo

[root @ masternode /] # cd / etc / nginx 
[root @ masternode nginx] # mkdir ssl_cert 
[root @ masternode nginx] # cd ssl_cert 
[root @ masternode ssl_cert] # pwd 
/ etc / nginx / ssl_cert 
[root @ masternode ssl_cert] # openssl genrsa -des3 -out tmp.key 2048 
Generando clave privada RSA, módulo largo de 2048 bits 
.............. +++ 
............. ............................................... +++ 
e es 65537 (0x10001) 
Ingrese la frase de contraseña para tmp.key: 
Verificando - Ingrese la frase de contraseña para tmp.key: 
[root @ masternode ssl_cert] # ls -l 
total 4 
-rw-r - r-- 1 root root 1751 Sep 21 23:45 tmp.key

Copiar codigo

Al generar un archivo de clave privada, debe ingresar una contraseña. No es realista tener que ingresar la clave cada vez que usa un navegador para acceder a HTTPS. Debe convertir la clave privada y cancelar la contraseña. Siga los pasos a continuación.

2.2 Convertir a una clave privada sin contraseña

Copiar codigo

[root @ masternode ssl_cert] # openssl rsa -in tmp.key -out moonxy.key 
Introduzca la frase de contraseña para tmp.key: 
escribiendo la clave RSA 
[root @ masternode ssl_cert] # ls -l 
total 8 
-rw-r - r- - 1 raíz raíz 1679 21 de septiembre 23:46 moonxy.key 
-rw-r - r-- 1 raíz raíz 1751 21 de septiembre 23:45 tmp.key 
[root @ masternode ssl_cert] # rm -f tmp.key 
[root @ masternode ssl_cert] # ls -l 
total 4 
-rw-r - r-- 1 raíz raíz 1679 21 de septiembre 23:46 moonxy.key

Copiar codigo

Elimine tmp.key con contraseña y solo mantenga la clave privada moonxy.key sin contraseña.

2.3 Generar archivo de solicitud de certificado

Copiar codigo

[root @ masternode ssl_cert] # openssl req -new -key moonxy.key -out moonxy.csr 
Se le pedirá que ingrese información que se incorporará 
a su solicitud de certificado. 
Lo que está a punto de ingresar es lo que se llama un Nombre Distinguido o DN. 
Hay bastantes campos, pero puede dejar algunos en blanco. 
Para algunos campos habrá un valor predeterminado. 
Si ingresa '.', El campo se dejará en blanco. 
----- 
Nombre del país (código de 2 letras) [XX]: CN 
Nombre del estado o provincia (nombre completo) []: 
Nombre de la localidad de Hong Kong (por ejemplo, ciudad) [Ciudad predeterminada]: 
Nombre de la organización de Hong Kong (por ejemplo, empresa) [ Default Company Ltd]: Moonxy 
Nombre de la unidad organizativa (p. Ej., Sección) []: Linux 
Common Name (p. Ej., Su nombre o el nombre de host de su servidor) []: masternode
Dirección de correo electrónico []: [email protected] 

Ingrese los siguientes atributos 'adicionales' 
que se enviarán con su solicitud de certificado 
Una contraseña de desafío []: 20190922 
Un nombre de empresa opcional []: amxx 
[root @ masternode ssl_cert] # ls -l 
total 8 
-rw-r - r-- 1 raíz raíz 1119 22 de septiembre 15:55 moonxy.csr 
-rw-r - r-- 1 raíz raíz 1679 21 de septiembre 23:46 moonxy.key

Copiar codigo

Después de generar el archivo de solicitud de certificado moonxy.csr, lo usaremos y el archivo de clave privada moonxy.key para generar el archivo de certificado final, que es la clave pública.

2.4 Generar archivo de certificado de clave pública

Copiar codigo

[root @ masternode ssl_cert] # openssl x509 -req -days 365 -in moonxy.csr -signkey moonxy.key -out moonxy.crt 
Firma ok 
asunto = / C = CN / ST = HongKong / L = HongKong / O = moonxy / OU=Linux/CN=masternode/[email protected] 
Obtención de la clave privada 
[root @ masternode ssl_cert] # ls -l 
total 12 
-rw-r - r-- 1 root root 1298 22 de septiembre 16:02 moonxy. crt 
-rw-r - r-- 1 raíz raíz 1119 22 de septiembre 15:55 moonxy.csr 
-rw-r - r-- 1 raíz raíz 1679 21 de septiembre 23:46 moonxy.key

Copiar codigo

De esta forma finalmente se genera el archivo de certificado CRT moonxy.crt, que es la clave pública mencionada anteriormente.

Tres, Nginx configura SSL

Cree un nuevo archivo de configuración ssl.conf en / etc / nginx / vhost (si está compilado e instalado, generalmente / usr / local / nginx / conf / vhost) y agregue el siguiente contenido:

Copiar codigo

[root @ masternode vhost] # vim /etc/nginx/vhost/ssl.conf 
server { 
    listen 443; 
    nombre_servidor moonxy.com; 
    index index.html index.php; 
    root / data / www / nginx / moonxy; 

    ssl encendido; 
    ssl_certificate ssl_cert / moonxy.crt; 
    ssl_certificate_key ssl_cert / moonxy.key; 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
}

Copiar codigo

Luego verifique la sintaxis del archivo de configuración, cree index.html e inicie el servicio nginx, de la siguiente manera:

Copiar codigo

[root @ masternode vhost] # nginx -t 
nginx: la sintaxis del archivo de configuración /etc/nginx/nginx.conf está bien 
nginx: el archivo de configuración /etc/nginx/nginx.conf prueba es exitosa 
[root @ masternode vhost] # mkdir - p / data / www / nginx / moonxy 
[root @ masternode vhost] # vim /data/www/nginx/moonxy/index.html 
Esta es la prueba SSL para moonxy.com 
[root @ masternode vhost] # systemctl start nginx 
[root @ masternode vhost] # ps aux | grep nginx 
root 8810 0.0 0.2 125008 2144? SS 16:31 0:00 nginx: proceso maestro / usr / sbin / nginx 
nginx 8811 0.0 0.3 125404 3192? S 16:31 0:00 nginx: 
raíz del proceso de trabajo 8813 0.0 0.0 112708976 pts / 0 R + 16:31 0:00 grep --color = auto nginx

Copiar codigo

Luego configure la asignación de nombres de dominio en el archivo de hosts local:

C: \ Windows \ System32 \ drivers \ etc 
192.168.150.140 www.moonxy.com moonxy.com

Utilice el navegador Chrome para visitar https://moonxy.com.

 

Cuarto, solicite un certificado a través de Alibaba Cloud

Puede solicitar un certificado SSL gratuito de Sysmantec a través de Alibaba Cloud. Tenga en cuenta que la tarifa de compra que se muestra a la derecha es 0.00, como se indica a continuación


 

Supongo que te gusta

Origin blog.csdn.net/smilejiasmile/article/details/112530462
Recomendado
Clasificación