September 12, 2022

Работа с ICAO PKD на Python и OpenSSL

Участники ICAO PKD

Что такое ICAO PKD

ICAO PKD - Международый центральный репозиторий открытых ключей электронных документов (eMRTD). Данные открытые ключи предназначены для проверки подписи чипа электронного паспорта/ID. Скачать данные с репозитория может абсолютно каждый по ссылке, нужный нам файл называется "The latest collection of Document Signing Certificates(DSCs) and Certificate Revocation Lists(CRLs) to verify electronic passports.".

Получаем данные (LDIF -> PEM)

После загрузки мы получаем данные в формате LDIF, но нам необходим формат PEM, это можно конвертировать вручную через OpenSSL, но предлагаю воспользоваться более удобным решением - этот скрипт на Python. После его работы мы получаем файл masterList.pem. Для удобства работы в XCA мы можем конвертировать это все в PKCS7 (.p7b) через команду:

openssl crl2pkcs7 -nocrl -certfile masterList.pem -out masterList.p7b
Файл masterList.p7b в XCA

Проверка сертификата паспорта

Если у вас уже есть сертификат паспорта в формате PEM то можно проверить его простой командой:

openssl verify -CAfile masterList.pem EF_SOD.pem

Однако в большинстве у всех сертификат в формате PKCS7, и чтобы избежать лишних телодвижений с конвертированием форматов предлагаю воспользоваться возможностью OpenSSL получать данные из STDIN:

openssl pkcs7 -in /path/to/EF_SOD.p7b -inform DER -print_certs | openssl verify -CAfile masterList.pem

В случае удачной проверки выдаст: stdin: OK