User Tools

Site Tools


comandos_openssl_utiles_para_certificados

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
comandos_openssl_utiles_para_certificados [2021/03/07 00:51] busindrecomandos_openssl_utiles_para_certificados [2023/07/12 15:38] (current) busindre
Line 6: Line 6:
  
 <code text>Signature Algorithm: sha512WithRSAEncryption</code> <code text>Signature Algorithm: sha512WithRSAEncryption</code>
 +
 +**RSA vs EC**
 +
 +Se recomienda el uso de EC en vez de RSA cuando sea posible. 
 +
 +<code bash># Listar las curvas disponibles
 +openssl ecparam -list_curves
 +
 +# Generación de una llave privada EC.
 +openssl ecparam -name prime256v1 -genkey -noout -out private-key.pem
 +# Generación de una llave privada EC cifrada (Pidiendo el password por el promt y algoritmo de cifrado AES256).
 +openssl genpkey -out private-key.pem -outform PEM -aes256 -algorithm ec -pkeyopt ec_paramgen_curve:prime256v1
 +# Generación de una llave privada EC cifrada (Indicando como parámetro la password XXXXX y algoritmo de cifrado AES256).
 +openssl genpkey -out private-key.pem -outform PEM -pass pass:XXXXX -aes256 -algorithm ec -pkeyopt ec_paramgen_curve:prime256v1
 +
 +# Generación de una llave pública EC.
 +openssl ec -in private-key.pem -pubout -out public-key.pem</code>
 +
 +Casi todos los comandos funcionan tanto con llaves RSA como  con llaves EC, simplemente hay que estar atento a los parámetros en uso.
 +<code bash># RSA
 +-newkey rsa:4096
 +# EC
 +-newkey ec -pkeyopt ec_paramgen_curve:sect571r1</code>
  
 **Comandos generales** (Generar CSRs, Certificados, llaves privadas, etc). **Comandos generales** (Generar CSRs, Certificados, llaves privadas, etc).
  
 Generar llave privada + Certificate Signing Request. Generar llave privada + Certificate Signing Request.
-<code bash>openssl req -sha512 -out CSR.csr -new -newkey rsa:4096 -nodes -keyout privateKey.key</code>+<code bash># RSA 
 +openssl req -sha512 -out CSR.csr -new -newkey rsa:4096 -nodes -keyout privateKey.key 
 +# EC (Consultar qué tipo de curva se va a suar mediante openssl ecparam -list_curves) 
 +openssl req -sha512 -out CSR.csr -new -newkey ec -pkeyopt ec_paramgen_curve:sect571r1  -nodes -keyout privateKey.key 
 +</code>
  
 Generar certificado autofirmado. (SHA-512 / RSA 4096). Generar certificado autofirmado. (SHA-512 / RSA 4096).
-<code bash>openssl req -x509 -nodes -sha512 -days 365 -newkey rsa:4096 -keyout privateKey.key -out certificate.crt</code>+<code bash> # RSA 
 +openssl req -x509 -nodes -sha512 -days 365 -newkey rsa:4096 -keyout privateKey.key -out certificate.crt 
 +# EC 
 +openssl req -x509 -nodes -sha512 -days 365 -newkey ec -pkeyopt ec_paramgen_curve:sect571r1 -keyout privateKey.key -out certificate.crt 
 +</code>
  
 Generar certificado autofirmado a partir de una llave privada existente. (SHA-512) Generar certificado autofirmado a partir de una llave privada existente. (SHA-512)
Line 22: Line 53:
  
 Generar una solicitud de certificado csr (Certificate Signing Request) a partir de un certificado existente. Generar una solicitud de certificado csr (Certificate Signing Request) a partir de un certificado existente.
-<code bash>openssl x509 -sha512 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key</code>+<code bash>openssl x509 -sha512 -x509toreq -x509toreq -copy_extensions -in certificate.crt -out CSR.csr -signkey privateKey.key</code> 
 + 
 +Generar certificado autofirmado con SAN. (SHA-512 / RSA 4096 o EC). 
 + 
 +<code bash># Para crear un certificado para múltiples dominios, es decir, no solo basado en CN, debe crearse un fichero CSR primeramente con la información pertinente. 
 + 
 +### Fichero req.cnf 
 + 
 +[req] 
 +distinguished_name = req_distinguished_name 
 +x509_extensions = v3_req 
 +prompt = no 
 +[req_distinguished_name] 
 +C = ES 
 +ST = Bayern 
 +L = Munich 
 +O = Inventos 
 +OU = IT 
 +CN = www.dominio.com 
 +[v3_req] 
 +keyUsage = keyEncipherment, dataEncipherment 
 +extendedKeyUsage = serverAuth 
 +subjectAltName = @alt_names 
 +[alt_names] 
 +DNS.1 = www.dominio.com 
 +DNS.2 = www2.dominio.com 
 +DNS.3 = portainer.dominio.com 
 +DNS.4 = traefik.cominio.com 
 + 
 +### Generar el certificado autofirmado basado en la configuración anterior definida en req.cnf. 
 + 
 +# RSA 
 +openssl req -x509 -nodes -sha512 -days 365 -newkey rsa:4096 -keyout privateKey.key -out certificate.crt -config req.cnf -extensions 'v3_req' 
 +# EC (Depende del cliente / navegador que conecte con el certificado, la curva debe elegirse acorde a la compatibilidad, actualmente 2021 muy pocas están soportadas por los navegadores) 
 +openssl req -x509 -nodes -sha512 -days 365 -newkey ec -pkeyopt ec_paramgen_curve:sect571r1 -keyout privateKey.key -out certificate.crt -config req.cnf -extensions 'v3_req' 
 + 
 +# Mensaje de Curl al acceder a un certificado https que usa EC. 
 +# curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure 
 +</code> 
  
 Eliminar contraseña (passphrase) de cifrado de una llave privada openssl. (Si se usa el mismo nombre se sobreescribe). Eliminar contraseña (passphrase) de cifrado de una llave privada openssl. (Si se usa el mismo nombre se sobreescribe).
-<code bash>openssl rsa -in privateKey.pem -out newPrivateKey.pem</code>+<code bash># RSA 
 +openssl rsa -in privateKey.pem -out newPrivateKey.pem 
 +# ECC 
 +openssl ec -in privateKey.pem -out newPrivateKey.pem 
 +</code>
  
 Cifrar llave privada con contraseña (passphrase). (Si se usa el mismo nombre se sobreescribe). Cifrar llave privada con contraseña (passphrase). (Si se usa el mismo nombre se sobreescribe).
-<code bash>openssl rsa -des -in privateKey_sin_pwd.key -out privateKey_con_pwd.key</code>+<code bash># RSA 
 +openssl rsa -des -in privateKey_sin_pwd.key -out privateKey_con_pwd.key 
 +# EC 
 +openssl ec -des -in privateKey_sin_pwd.key -out privateKey_con_pwd.key 
 +</code>
  
-Cambiar clave de cifrado de una llave privada (Si se usa el mismo nombre de fichero salida se sobreescribe).+Cambiar clave de cifrado de una llave privada (Si se usa el mismo nombre de fichero salida se sobrescribe).
 <code bash>openssl rsa -des -in privateKey.key -out privateKey_new_pwd.key</code> <code bash>openssl rsa -des -in privateKey.key -out privateKey_new_pwd.key</code>
  
 **Revisar Certificados y CSRs (locales o remotos)** **Revisar Certificados y CSRs (locales o remotos)**
  
-Con Openssl es posible conectar a servidores remotos y obtener información sobre los certificados usados. Para ello se usa la opción "-connect", pero debemos tener en cuenta el protocolo usado por el puerto. Dependiendo del tipo de protocolo usado, será necesario incluir la opción "-starttls protocolo". Esto se debe a a que muchos servicios ofrecen cifrado, pero únicamente si este es solicitado de manera explicita (por ejemplo en SMTP mediante [[https://es.wikipedia.org/wiki/STARTTLS|STARTTLS]]). En casos como SMTP o XMPP sería obligatorio el uso de ese parámetro, pero no así en otros como HTTPS.+Con Openssl es posible conectar a servidores remotos y obtener información sobre los certificados usados. Para ello se usa la opción "-connect", pero debemos tener en cuenta el protocolo usado por el puerto. Dependiendo del tipo de protocolo usado, será necesario incluir la opción "-starttls protocolo". Esto se debe a a que muchos servicios ofrecen cifrado, pero únicamente si este es solicitado de manera explicita (por ejemplo en SMTP mediante [[https://es.wikipedia.org/wiki/STARTTLS|STARTTLS]]). En casos como SMTP (NO SMTPS !!) o XMPP sería obligatorio el uso de ese parámetro, pero no así en otros como HTTPS o SMTPS. Más adelante se ven ejemplos relacionados con este concepto.
  
 Revisar / Mostrar información de una solicitud de firma de certificado CSR (Certificate Signing Request). Revisar / Mostrar información de una solicitud de firma de certificado CSR (Certificate Signing Request).
Line 41: Line 119:
  
 Revisar / Mostrar información de una llave privada. Revisar / Mostrar información de una llave privada.
-<code bash>openssl rsa -in privateKey.key -check</code>+<code bash> # RSA 
 +openssl rsa -in privateKey.key -check 
 +# EC 
 +openssl ec -in privateKey.key -check 
 +</code>
  
 Revisar / Mostrar información de un certificado X509 en formatos: PEM / DER / NET. Revisar / Mostrar información de un certificado X509 en formatos: PEM / DER / NET.
Line 70: Line 152:
 <code bash>openssl x509 -noout -modulus -in cacert.pem | openssl sha256 <code bash>openssl x509 -noout -modulus -in cacert.pem | openssl sha256
 openssl x509 -noout -modulus -in cacert.pem | sha256sum # Mismo resultado que el anterior.</code> openssl x509 -noout -modulus -in cacert.pem | sha256sum # Mismo resultado que el anterior.</code>
- 
  
  
Line 80: Line 161:
 # SMTP over TLS(-starttls smtp). # SMTP over TLS(-starttls smtp).
 echo | openssl s_client -connect mxext3.mailbox.org:25 -starttls smtp 2>/dev/null |openssl x509 -dates -noout echo | openssl s_client -connect mxext3.mailbox.org:25 -starttls smtp 2>/dev/null |openssl x509 -dates -noout
 +# SMTPS (No necesita de starttls ya que es un puerto pensado para el uso cifrado únicamente).
 +echo | openssl s_client -connect smtp.gmail.com:465  2>/dev/null |openssl x509 -dates -noout
 </code> </code>
  
Line 161: Line 244:
 **Comandos de debug de OpenSSL**. **Comandos de debug de OpenSSL**.
  
-Comprobar si un certificado o solicitud de certificado se corresponde con una determinada llave privada.+Comprobar si un certificado o solicitud de certificado se corresponde con una determinada llave privada (RSA).
  
 <code bash>openssl x509 -noout -modulus -in certificate.crt | openssl md5 <code bash>openssl x509 -noout -modulus -in certificate.crt | openssl md5
Line 179: Line 262:
  
 Convertir llaves DER (.crt .cer .der) al estandar PEM y viceversa. Convertir llaves DER (.crt .cer .der) al estandar PEM y viceversa.
-<code bash>openssl rsa -inform der -in certificate.cer -out certificate.pem +<code bash># RSA 
-openssl rsa -outform der -in certificate.pem -out certificate.der</code>+openssl rsa -inform der -in certificate.cer -out certificate.pem 
 +openssl rsa -outform der -in certificate.pem -out certificate.der 
 + 
 +# EC PEM to DER 
 +openssl ec -in certificate.der -inform DER -outform PEM -out certificate.pem 
 +openssl ec -in certificate.pem -inform PEM -outform DER -out certificate.der 
 +</code>
  
 Convertir ficheros PKCS#12 (.pfx .p12) con llave privada y certificado a PEM. Convertir ficheros PKCS#12 (.pfx .p12) con llave privada y certificado a PEM.
Line 228: Line 317:
  
 Obtener el "SPKI fingerprint" (Base64) a partir de una clave privada. Obtener el "SPKI fingerprint" (Base64) a partir de una clave privada.
-<code>openssl rsa -in file.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64</code>+<code># RSA 
 +openssl rsa -in file.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64 
 +# EC 
 +openssl ec -in file.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64 
 +</code>
  
 Obtener el "SPKI fingerprint" (Base64) a partir de un csr (certificate signing request). Obtener el "SPKI fingerprint" (Base64) a partir de un csr (certificate signing request).
Line 234: Line 327:
  
 Obtener el "SPKI fingerprint" (Base64) a partir de un certificado. Obtener el "SPKI fingerprint" (Base64) a partir de un certificado.
-<code>openssl x509 -in file.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64</code>+<code># RSA 
 +openssl x509 -in file.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 
 +# EC 
 +openssl x509 -in file.crt -pubkey -noout | openssl ec -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 
 +</code>
  
 Obtener el "SPKI fingerprint" (Base64) de un servidor HTTPS. Obtener el "SPKI fingerprint" (Base64) de un servidor HTTPS.
-<code>openssl s_client -servername www.busindre.com -connect www.busindre.com:443 | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64</code>+<code># RSA 
 +openssl s_client -servername www.busindre.com -connect www.busindre.com:443 | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 
 +# EC 
 +openssl s_client -servername www.busindre.com -connect www.busindre.com:443 | openssl x509 -pubkey -noout | openssl ec -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 
 +</code>
  
 **Crear CSR / Firmar CSR multidominio** (SAN): [[crear_y_firmar_csrs_multidominio_san]] **Crear CSR / Firmar CSR multidominio** (SAN): [[crear_y_firmar_csrs_multidominio_san]]
comandos_openssl_utiles_para_certificados.1615074695.txt.gz · Last modified: 2021/03/07 00:51 by busindre