Explicación detallada de OpenSSL
Clave pública/clave privada/firma/verificar firma/cifrado/descifrado/cifrado asimétrico
Nuestro cifrado general es usar una contraseña para cifrar el archivo y luego usar la misma contraseña. para descifrarlo. Esto es fácil de entender. Este es un cifrado simétrico. Algunos cifrados utilizan una contraseña y el descifrado utiliza otro conjunto de contraseñas. Esto se llama cifrado asimétrico, lo que significa que las contraseñas de cifrado y descifrado son diferentes. Me temo que las personas que entren en contacto con él por primera vez no lo entenderán de todos modos. De hecho, esta es una aplicación del principio de multiplicación de números primos en matemáticas. Si debes entenderlo, Baidu tiene mucha información para leer. Por lo tanto, una de las claves de este conjunto se puede utilizar para cifrar los datos y la otra para descifrarlos. Sí, se pueden utilizar claves públicas y privadas para cifrar datos. En cambio, cuando se utiliza otra para descifrar datos, los datos se cifran con la clave pública y luego se descifran con la clave privada. La clave privada cifra los datos y la clave pública los descifra, lo que generalmente se conoce como firma y verificación de firmas.
Debido a que los datos cifrados con una clave pública solo se pueden descifrar con su clave privada correspondiente, puedes darle la clave pública a alguien y permitirle cifrar los datos que desea enviarte. Sólo cuando estos datos se le transfieren con la clave privada se pueden descifrar en datos útiles, y sólo entonces otros podrán obtenerlos y comprender el contenido. Del mismo modo, si firma datos con su clave privada, solo la clave pública emparejada puede descifrar los datos, y solo usted tiene la clave privada, por lo que si la clave pública emparejada descifra los datos, en aplicaciones prácticas, generalmente intercambia claves públicas con el otra parte, y luego los datos que desea enviar a la otra parte se cifran con su clave pública, y él usa su clave privada para descifrarlos después de obtenerlos. Los datos que quiere enviarle se cifran con su clave pública. Una vez que los obtiene, puede utilizar su clave privada para descifrarlos, garantizando la máxima seguridad.
RSA/DSA/SHA/MD5
Existen muchos algoritmos de cifrado asimétrico, el más famoso es RSA/DSA, pero la diferencia es que RSA se puede utilizar para cifrado/descifrado. y verificación de firma, mientras que DSA solo se puede utilizar para firmas. En cuanto a SHA, es el mismo algoritmo que md5. No se utiliza para cifrado/descifrado ni firma. Se llama algoritmo de resumen. Es un algoritmo que genera un resumen de longitud fija basado en el contenido de los datos. Esta cadena de valores de resumen tiene una relación correspondiente con los datos originales. Es decir, los datos originales generarán este resumen, pero este resumen no se puede restaurar a los datos originales. Bueno, generalmente lo que hace este algoritmo es que, si modificas ligeramente los datos originales, el resumen resultante es diferente. Resumiré los datos sin procesar en la transmisión para usted. También puede hacer un algoritmo de resumen sobre los datos originales obtenidos y compararlo con el resumen que se le proporcionó para saber si los datos se han modificado durante el proceso de transmisión.
En aplicaciones prácticas, dado que los datos a cifrar pueden ser muy grandes y el cifrado requiere mucho tiempo y es laborioso, los datos originales generalmente se resumen primero, luego se cifran los valores abstractos y los texto sin formato de los datos originales y el cifrado El valor abstracto final se le transfiere. De esta forma, al desbloquear el valor abstracto cifrado y correlacionarlo con el valor abstracto de los datos obtenidos, se puede saber si los datos han sido modificados. Además, debido a que solo usted tiene la clave privada, solo usted puede descifrar el valor abstracto, por lo que incluso otros pueden
CA/PEM/DER/X509/PKCS
La clave pública universal no transmitirse a otros en forma de texto. Normalmente, se generará un archivo. Este archivo es el archivo de clave pública y luego otros pueden cifrarlo. Pero si alguien la destruye maliciosamente durante la transmisión, puede reemplazar su clave pública con su clave pública y luego obtener los datos cifrados de la parte de la clave pública. ¿No puede descifrar los datos con su propia clave? Para solucionar este problema se necesita un notario. Cualquiera puede encontrarlo para confirmar quién envió la clave pública. Esto es CA, y el principio de que CA confirme la clave pública también es muy simple. Publica su clave pública para todos, y luego, si una persona quiere publicar su clave pública, puede enviar su clave pública y cierta información de identidad a la CA, y la CA la cifra con su propia clave. Esto también se puede llamar firma. Entonces, este archivo que contiene su clave pública y su información se puede llamar archivo de certificado.
De esta manera, todos los que obtienen algún archivo de clave pública lo descifran a través de la clave pública de la CA. Si se descifra normalmente, la información del secreto debe ser verdadera, porque la parte que cifra solo puede ser la CA y nadie más tiene su clave. De esta manera puede desbloquear el archivo de clave pública y ver si la información que contiene es la clave pública que necesita cifrar.
En aplicaciones prácticas, la mayoría de las personas no requieren firmas de CA porque lo hacen por dinero, por lo que pueden crear un archivo de certificado autofirmado, es decir, generar un par de claves usted mismo y luego usarlas. otra clave generada por usted mismo. Firme la clave en la clave. Esto es solo para aquellos que realmente necesitan firmar el certificado. El cifrado y descifrado de datos ordinarios se pueden completar directamente utilizando la clave pública y la clave privada.
Los formatos de archivo clave generados por OpenSSL son solo PEM y DER. PEM codifica la clave en base64 y puede ver una cadena de letras en inglés cuando la abre directamente. El formato DER es un archivo de clave binaria y como puedes ver... ¡no entiendes nada! .X509 es una definición universal de formato de archivo de certificado. El conjunto de estándares pkcs son estándares de archivos designados para almacenar claves. Sólo necesitas saber que estos formatos de PEM DER X509 PKCS se pueden convertir entre sí.
==End blogs.com/phpinfo/archive/2013/08/09/3246376.html = =
Para facilitar la comprensión, hice un dibujo de la siguiente manera:
Utilice openssl para generar certificados (incluidos los detalles de openssl)
1. Introducción a openssl
Openssl es actualmente la herramienta de biblioteca de contraseñas SSL más popular. , un conjunto de herramientas sólido y con todas las funciones para respaldar la implementación de protocolos SSL/TLS.
Sitio web oficial: PANY) [Sociedad limitada predeterminada]: SunfoBank
Nombre de la unidad organizativa (como departamento) []: Departamento de Tecnología de la Información
Nombre común ( como su nombre o el nombre de host del servidor) []: sunfobank.com
Dirección de correo electrónico []: admin@sunfobank.com
[root @ szxjdwins 01-we b- 27 cert]# ll
Total 8
-rw-r - r -. 1 raíz raíz 1452 22 de junio 14:29 cert CRT
-rw-r - r -. 1 raíz raíz 1708 22 de junio 14:29 RSA_private.key
OpenSSL solicita nueva clave RSA:2048-nodes-key out RSA_private.key-x509-days 36500-out cert.CRT-subj "/C = CN/ST = GuangDong/L = ShenZhen/O = SunFoBank/OU = Departamento de TI/CN = sunfobank.com/emailAddress=admin@sunfobank.com "
openssl req -new - x509 -days 36500 key rsa_private.key -out cert.crt
Cuarto, genere el archivo de solicitud de firma del servidor y la firma de CA para emitir el certificado del servidor ()
No se recomienda Server.key Agregar contraseña. Si se agrega una contraseña, se solicitará cada vez que se reinicie nginx, lo que afectará la eficiencia.
La configuración de Nginx solo requiere dos archivos, server.key y server.crt
OpenSSL gen RSA-AES 256-passout pass: 111111-out server key 2048
<. p>OpenSSL req-nuevo servidor de claves[root @ szxjdwins 01-we b-27 cert]# OpenSSL gen RSA-AES 256-pass out pass: 111111-out key 2048 p>.
Generar clave privada RSA, módulo largo de 2048 bits
.........................
.......
e es 65537 (0x10001)
[root @ szxjdwins 01-we b-27 cert]# OpenSSL gen RSA -AES 256-out server .key 2048
Generar clave privada RSA, módulo largo de 2048 bits
............. ........... ..............
............. ................ ....................
e es 65537 (0x10001)
Ingrese la contraseña del servidor. Clave: 1111111 Ingrese la contraseña manualmente.
Autenticación: ingrese la contraseña del servidor, clave: 1111111 Ingrese la contraseña manualmente.
[root @ szxelab 01-we b-27 cert]# OpenSSL req-new-key server . key-out server
Ingrese la contraseña de server.key:
p>
Se le pedirá que ingrese información que se incorporará
en 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 puedes dejar algunos en blanco
Para algunos campos, habrá un valor predeterminado,
Si ingresas ". " , el campo quedará en blanco.
Nombre del país (código de 2 letras) [XX]: CN
Nombre del estado o provincia (nombre completo) []: Guangdong
Nombre del lugar (como como Ciudad) [ciudad predeterminada]: Shenzhen
Nombre de la organización (como empresa) [sociedad limitada predeterminada]: Sun Bank
Nombre de la unidad organizativa (como departamento)[]: Información Departamento de Tecnología
Nombre común (por ejemplo, su nombre o el nombre de host del servidor) []: sunfobank.com
Dirección de correo electrónico []: admin@sunfobank.com
Ingrese los siguientes atributos "adicionales"
Enviar con su solicitud de certificado
Desafío de contraseña[]: No ingrese una contraseña.
Nombre de empresa opcional[]: No introduzca contraseña.
Después de eso, ingrese la contraseña y la información del certificado del servidor, o especifique varios parámetros en la línea de comando.
Servidor OpenSSL req-new-key. Pasar clave: servidor 11111-out. CSR-subj "/C = CN/ST = GuangDong/L = ShenZhen/O = SunFoBank/OU = Departamento de TI. /CN = sunfobank.com/emailAddress=admin@sunfobank.com "
* * *El archivo de solicitud de firma csr generado se puede enviar a CA para su publicación* * *
Servidor Caterpillar .csr
-Iniciar solicitud de certificado-
datos codificados en base64
-Finalizar solicitud de certificado-
OpenSSL req-noout-text - en el servidor CSR
OpenSSL x509-req-days 365000-in server. CSR-CAkey RSA _ private key-passin server. p>
[root @ szxelab 01-we b-27 cert]# OpenSSL x509-req-days 365000-in cert CRT-CAkey RSA _ private key-passin pass: 111111-cacreate serial. servidor de salida CRT
La firma está bien
asunto =/C = CN/ST = GuangDong/L = ShenZhen/O = SunFoBank/OU = Departamento de TI/CN = sunfobank. com/emailAddress=admin@sunfobank.com
Obtener la clave privada de CA
La opción CAxxx se utiliza para especificar la entrada del parámetro CA.
[root @szxelab 01-we b-27 cert]#ll
Total 24 personas
-rw-r - r -. 1 raíz raíz 1452 22 de junio 14:29 cert CRT
-rw-r - r -. 1 raíz raíz 17 22 de junio 15:07 cert SRL
-rw-r-r-. 1 raíz raíz 1708 22 de junio 14:29 RSA_private.key
-rw-r-r-. 1 raíz raíz 1334 22 de junio 15:07 servidor CRT
-rw-r - r -. 1 raíz raíz 1070 22 de junio 15:04 servidor CSR
-rw-r - r -. 1 root root 1766 22 de junio 14:54 server key
Cualquier operación en nginx en este momento requiere que se le solicite ingresar la contraseña de server.key.
[root @ szxelab 01-we b-27 nginx]#/application/nginx/sbin/nginx-t
Ingrese la frase de contraseña PEM: Ingrese la contraseña 111111.
nginx: archivo de configuración/aplicación/nginx-1.12.2//conf/nginx.conf sintaxis puede
Por ejemplo, si no ingresa una contraseña, debe cifrarla server.key Convertir a server.key sin cifrar.
[root @ szxelab 01-we b-27 cert]# OpenSSL RSA-in server .key-passin pass: 111111-out server key
Escribiendo clave RSA
En este momento, la operación nginx no solicitará una contraseña:
[root @ szxelab 01-we b-27 cert]#/application/nginx/sbin/nginx-t p>
nginx: archivo de configuración/aplicación/nginx-1.12.2//conf/nginx. La sintaxis de conf es correcta
nginx: archivo de configuración/aplicación/nginx-1.12.2//conf/ Prueba nginx .conf exitosa
Ubicación del certificado:
[root @ szxelab 01-we b-27 cert]# pwd
/application/nginx/certificate
[root @ szxelab 01-we b-27 cert]# ll
Total 24 personas
-rw-r - r -. 1 raíz raíz 1452 22 de junio 14:29 cert CRT
-rw-r - r -. 1 raíz raíz 17 22 de junio 15:07 cert SRL
-rw-r-r-. 1 raíz raíz 1708 22 de junio 14:29 RSA_private.key
-rw-r-r-. 1 raíz raíz 1334 22 de junio 15:07 servidor CRT
-rw-r - r -. 1 raíz raíz 1070 22 de junio 15:04 servidor CSR
-rw-r - r -. 1 raíz raíz 1679 22 de junio 15:19 clave del servidor
En este punto, se completa la configuración del certificado privado en el escenario de prueba.
Visualización y conversión de certificados de verbo (abreviatura de verbo)
Ver detalles del certificado
Cert OpenSSL x509-in CRT-noout-text
Convertir formato de codificación de certificado
Certificado OpenSSL x509-in. cer-inform DER-out formulario PEM-out cert.
Sintetizar certificado pkcs#12 (incluida la clave privada) <. /p>
* *Transferir certificado pem y clave privada al certificado pkcs#12* *
Servidor OpenSSL pkcs 12-export-in Servidor CRT-inkey contraseña: 11111. pass: 11111-out server
Entre ellos, -export indica el certificado pkcs#12, -inkey especifica el archivo de clave privada, -passin especifica la contraseña de la clave privada (archivo) (los nodos no están cifrados ), -contraseña Especifique la contraseña para archivos p12 (importación y exportación).
* *Fusionar el certificado pem y la clave privada/certificado CA en el certificado pkcs#12* *
Servidor OpenSSL pkcs 12-export-in servidor CRT-inkey. : 11111 \-chain-CAfile ca . CRT-password pass: 11165438
Donde -chain significa agregar una cadena de certificados al mismo tiempo, -CAfile especifica un certificado de CA y el archivo p12 exportado contendrá múltiples certificados. (Otras opciones: -name se puede usar para especificar el alias del certificado del servidor; -caname se puede usar para especificar el alias del certificado ca)
** pcks#12 Extraer archivos PEM (incluidas las claves privadas)**
OpenSSL pkcs 12-in server .p 12-pass pass: 1111-pass out pass: 111111111-out/server
Donde -contraseña especifica la contraseña del archivo p12. (importación y exportación), - Passout se refiere a la contraseña cifrada de la clave privada de salida (nodos significa no cifrado).
El archivo exportado está en formato pem, incluido el certificado y la clave privada (pkcs#8):
Propiedades del equipaje
keyid local: 97 DD 46 3D 1E 91 EF 01 3B 2E 4A 75 81 4F 11 A6 E7 1F 79 40 sujeto =/C = CN/ST = GD/L = SZ/O = VI hoo/OU = dev/CN = vihoo.com/emailAddress=yy@ vihoo.com
emisor =/C = CN/ST = GD/L = SZ/O = viroot/OU = dev/CN = viroot.com/emailAddress=yy@viroot.com-BEGIN CERTIFICATE- miidazccalmcccqciola 9 /dcfejanbgkqhkig 9 w0 baqufadb 5 mqswcqydvqqgewjd
1LpQCA 2B6dn4scZwaCD - Propiedades del paquete de certificado END
keyid local: 97 DD 46 3D 1E 91 EF 01 3B 2E 4A 75 81 4F 11 A6 E 7 1F 79 40 Atributos clave: ltNo atributosgt
- COMENZAR clave privada cifrada-miievaibadanbgkqhkig 9 w 0 baqefaascbkywggsiageaoibaqdc/6rac 1 yap rnf
K9ZLHbyBTKVaxehjxzJHHw==
- Finalizar clave privada de cifrado -
Extraer solo clave privada
Servidor OpenSSL pkcs de 12 entradas p pase de 12 pases: 1111-pase de salida: 111111111-nocerts-out/out.
Extraer solo certificados (todos los certificados)
Servidor OpenSSL pkcs de 12 entradas p. Contraseña de 12: 11111-sin claves/PEM
OpenSSL pkcs 12-in server-all .p 12-password pass: 11111-nokeys-cacerts-out/cacert
Extraer certificado de servidor únicamente.
OpenSSL pkcs 12-in server-all.p 12-Contraseña pasada: 11111-sin claves-clcerts-out/cert
6.