Как рассчитать отпечаток SHA-1 сертификата X.509 в C / C ++ / Objective-C?

Фон:

Я пишу клиентскую утилиту, которая способна подключаться к удаленному серверу с использованием SSL / TLS. Клиент использует OpenSSL для выполнения транзакций SSL / TLS, и я хотел бы разрешить пользователям указывать авторизованные сертификаты CA (в случае самозаверяющих сертификатов или настроек частного CA), используемые для подписи сертификата сервера. Я планирую использовать отпечаток пальца, общее имя и даты действия сертификата, чтобы пользователь мог быстро просмотреть сертификаты, которые клиент использует для проверки серверов.

Вопрос:

Как рассчитать хэш / отпечаток SHA1 сертификата X509, хранящегося в файле PEM, с использованием C / C ++ / Objective-C?

После нескольких дней поиска и экспериментов я нашел решение и опубликую его как ответ, однако я приветствую более или более правильные решения.

Ответы на вопрос(2)

Ваш ответ на вопрос