Online Certificate Status Protocol (OCSP) es un método para determinar el estado de revocación de un certificado digital X.509 usando otros medios que no sean el uso de CRL (Listas de Revocación de Certificados). Este protocolo se describe en el RFC 2560 y está en el registro de estándares de Internet.
Ventajas sobre las CRL (Certificate Revocation List). OCSP fue creado para solventar ciertas deficiencias de las CRL. Cuando se despliega una PKI (Infraestructura de Clave Pública), es preferible la validación de los certificados mediante OCSP sobre el uso de CRL por varias razones:
La guía para crear un servidor OCSP está basada en CentOS aplicable al resto de distribuciones GNU/Linux.
NOTA: Se puede especificar la opción “-days” desde la linea de comandos o bien en el fichero “openssl.cnf”, donde también sería interesante adaptar otras opciones como el algoritmo de firma predeterminado.
Editar el fichero de configuración de openssl /etc/pki/tls/openssl.cnf.
[ usr_cert ] authorityInfoAccess = OCSP;URI:http://www.XXX.com:2560 [ v3_OCSP ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = OCSPSigning crlDistributionPoints = URI:http://XXXXXXXX/XX.crl authorityInfoAccess = @ocsp_section certificatePolicies = @OCSP_CPS [ OCSP_CPS ] #policyIdentifier = TSA-CPS CPS.1 = "http://XXXX" CPS.2 = "http://XXXX" userNotice.1 = @OCSP_CPS_Notice [ OCSP_CPS_Notice ] explicitText = "XXXXXXXXX)" [ocsp_section] caIssuers;URI.0 = http://www.XXX.org/ OCSP;URI.0 = http://www.XXX.com:2560
NOTA: Se recomienda agregar / modificar la siguiente directiva a openssl.conf para generar firmas SHA512.
default_md = sha512
Crear entidad certificadora (CA). Modificar el script /etc/pki/tls/misc/CA según necesidad, por ejemplo ampliando la validez del certificado (3 años por defecto).
echo '1000' > /etc/pki/CA/serial cd /etc/pki/tls/misc ./CA -newca
Ficheros: /etc/pki/CA/cacert.pem y /etc/pki/CA/private/cakey.pem
NOTA: Si ya se dispone de una entidad certificadora, se debe simplemente agregar en esas dos rutas el certificado y la clave privada de la CA. No haría falta más.
Crear un fichero en blanco /etc/pki/CA/index.txt y un fichero /etc/pki/CA/index.txt.attr con este contenido.
unique_subject = no
Lo anterior evita el siguiente mensaje de error.
failed to update database TXT_DB error number 2
Generar certificados para el servidor OCSP.
mkdir /etc/pki/CA/OCSP cd /etc/pki/CA/OCSP openssl req -sha512 -new -nodes -out ocsp.test.local.csr -keyout ocsp.test.local.key -extensions v3_OCSP
La CA firma la solicitud generada anteriormente (La CA emite el certificado), en el ejemplo para 10 años.
openssl ca -policy policy_anything -in ocsp.test.local.csr -out ocsp.test.local.crt -days 3650 -extensions v3_OCSP
NOTA: Si se están haciendo pruebas, es recomendable revisar el identificador de “/etc/pki/CA/serial” y comprobar que el número de serie es el que debe ser y no ha cambiado. Esto sucede cada vez que se emite un certificado (se firma una solicitud). Una señal de que se debe revisar esto se da cuando se obtiene la salida “unknow” al comprobar un certificado por OCSP. EL archivo “/etc/pki/CA/index.txt” puede que se quiera limpiar también, para ello lo mejor es borrarlo y crearlo nuevamente con el comando “touch” (no debe contener ninguna linea en blanco.)
Arrancar servidor OCSP en el puerto 2560.
openssl ocsp -index /etc/pki/CA/index.txt -port 2560 -ignore_err -rsigner /etc/pki/CA/OCSP/ocsp.test.local.crt -rkey /etc/pki/CA/OCSP/ocsp.test.local.key -CA /etc/pki/CA/cacert.pem -text -out /etc/pki/CA/OCSP/log.txt &
NOTA: el parámetro “-ignore_err” es importante para que el servidor no se cierre cada vez que se reciba una solicitud invalida.
# Registro del servidor al recibir una petición erronea. Responder Error: malformedrequest (1)
Comprobar la validez de un certificado (newcert.pem) emitido (firmado) por dicha CA.
openssl ocsp -CAfile /etc/pki/CA/cacert.pem -issuer /etc/pki/CA/cacert.pem -cert newcert.pem -url http://www.XXX.com:2560
Revocar un certificado SSL. Se debe identificar el número serial de dicho certificado en /etc/pki/CA/newcerts/, por ejemplo c5:07:3c:dc:c5:8a:cb:ad.
openssl ca -revoke /etc/pki/CA/newcerts/C5073CDCC58ACBAD.pem # Comprobar la revocación anterior. openssl ocsp -CAfile /etc/pki/CA/cacert.pem -issuer /etc/pki/CA/cacert.pem -cert /etc/pki/CA/newcerts/C5073CDCC58ACBAD.pem -url http://www.XXX.com:2560 -resp_text
Enlace de Interés: https://raymii.org