2010-07-20 1 views
5

Я только что начал работать с сертификатами X.509. Может ли кто-нибудь сказать мне, как проверить сертификат на Linux? Вариант использования заключается в том, что мое приложение загрузило сертификат в предыдущем сеансе, и я должен проверить, все ли он действителен (т. Е. Не истек или отменен с момента его хранения) перед началом нового сеанса. Я понимаю, что полный образец здесь невозможен, но любые указатели будут полезны.Проверка сертификата X.509 на linux

EDIT: Дальнейшее исследование выявило еще одну утилиту, называемую Службы сетевой безопасности (NSS). Как это соотносится с OpenSSL с точки зрения удобства использования? Кроме того, я ищу программные решения, так как я не смогу запускать служебные программы командной строки.

+0

Возможный дубликат [x509 проверка сертификата в C] (http://stackoverflow.com/questions/2756553/x509-certificate-verification-in-c) – jww

ответ

0

OCSP - это протокол проверки отзыва сертификатов. Openssl предоставляет API проверки подлинности цепочки сертификатов и проверки подписи. Это требует некоторого количества кодирования. Поэтому я бы предложил вам изучить Openssl Документация.

Вы должны пройти цепочку сертификатов и проверить ее до тех пор, пока не получите корневой сертификат, который должен быть сохранен на вашем компьютере. Это самоподписанный сертификат, выданный юридическими лицами, называемыми корневыми центрами сертификации (центр сертификации)

Помимо OCSP существует устаревший метод, в котором вы должны получить список отзыва, а именно CRL, и проанализировать этот список для идентификатора сертификата.

EDIT: Я забыл упомянуть утилиту командной строки openssl, которая выполняет те же функции.

3

openssl verify будет делать то, что вы хотите, если вы хотите простой инструмент:

От работы:

cd /usr/share/ca-certificates 
find . -type f -exec openssl -verify {} \; 

Вот выбор выхода:

./telesec.de/deutsche-telekom-root-ca-2.crt: OK 
./brasil.gov.br/brasil.gov.br.crt: OK 
./cacert.org/cacert.org.crt: OK 
./spi-inc.org/spi-ca-2003.crt: /C=US/ST=Indiana/L=Indianapolis/O=Software in the Public Interest/OU=hostmaster/CN=Certification Authority/[email protected] 
error 10 at 0 depth lookup:certificate has expired 
OK 
./spi-inc.org/spi-cacert-2008.crt: OK 
./signet.pl/signet_ocspklasa3_pem.crt: /C=PL/O=TP Internet Sp. z o.o./CN=CC Signet - CA Klasa 3/serialNumber=Numer wpisu: 4 
error 2 at 1 depth lookup:unable to get issuer certificate 
./signet.pl/signet_ca3_pem.crt: /C=PL/O=TP Internet Sp. z o.o./CN=CC Signet - CA Klasa 3/serialNumber=Numer wpisu: 4 
error 20 at 0 depth lookup:unable to get local issuer certificate 

Если вы хотите скорее имеют результаты в более крупной программе, возможно, интерфейсы gnutls_x509_crt_verify(3), gnutls_x509_crt_get_key_usage(3), gnutls_x509_crt_check_revocation(3) проще в использовании, чем OpenSSL. (Я никогда не использовал gnutls, но у меня есть OpenSSL.)

18

Как уже упоминалось, вы можете использовать openssl verify. Согласно documentation, он также проверяет срок действия.

Программно, это может означать часы поиска плохой (или отсутствующей) документации, чтения примеров кода во всем Интернете и, вероятно, головной боли.

Для правильной проверки сертификата необходимо сообщить все промежуточные сертификаты. Обычно вы также должны сообщать список аннулирования (CRL), но это не требуется.

Итак, вот что вам нужно сделать, с точки зрения кода (OpenSSL):

  1. X509_STORE_new - Создать хранилище сертификатов;
  2. X509_STORE_CTX_new - создать контекст магазина;
  3. X509_STORE_add_cert - Добавить сертификат CA (и все промежуточные) в доверенный список хранилища сертификатов (обратите внимание: есть функция для поиска/загрузки списка);
  4. X509_STORE_add_crl - Добавить отозванные сертификаты в CRL хранилища сертификатов (примечание: то же, что указано выше);
  5. X509_STORE_CTX_init - Инициализировать контекст вашего магазина, информируя ваше хранилище сертификатов;
  6. X509_STORE_CTX_set_purpose - Определите цель, если вам это необходимо;
  7. X509_STORE_CTX_set_cert - укажите контекст, сертификат которого вы собираетесь проверить;
  8. X509_verify_cert - Наконец, проверьте его;
  9. X509_STORE_CTX_cleanup - Если вы хотите повторно использовать контекст для проверки другого сертификата, вы его очищаете и возвращаете обратно (5);
  10. Последнее, но не менее важное: освободить (1) и (2);

В качестве альтернативы, быстрая проверка может быть выполнена с помощью X509_verify. Однако имейте в виду, что он сравнивает только подписи.

Когда мне это было нужно, я провел день поиска, чтения и тестирования. Затем я понял, что все, что мне нужно, было правильным в исходном коде OpenSSL. Итак, если вам нужен пример, перейдите прямо к openssl-xxx/apps/verify.c.

ВАЖНО: НИКОГДА не используйте MD5. Чтобы понять причину, прочитайте Creating a rogue CA certificate.

+0

вы можете рассказать мне, как использовать список поиска/загрузки – Balamurugan