¿Cómo calcular la huella digital SHA-1 del certificado X.509 en C / C ++ / Objective-C?

Antecedentes

Estoy escribiendo una utilidad de cliente que es capaz de conectarse a un servidor remoto mediante SSL / TLS. El cliente usa OpenSSL para realizar las transacciones SSL / TLS y me gustaría permitir que los usuarios especifiquen certificados de CA autorizados (en el caso de certificados autofirmados o configuraciones de CA privadas) utilizados para firmar el certificado del servidor. Planeo usar la huella digital, el nombre común y las fechas de validez del certificado para permitir al usuario ver rápidamente los certificados que el cliente usa para validar los servidores.

Pregunta

¿Cómo calcula el hash / huella digital SHA1 de un certificado X509 almacenado dentro de un archivo PEM usando C / C ++ / Objective-C?

Después de días de búsqueda y experimentación, encontré una solución y la publicaré como respuesta, sin embargo, agradezco las soluciones mejores o más correctas.

Respuestas a la pregunta(4)

Su respuesta a la pregunta