пятница, 30 декабря 2011 г.

Обновление корневых сертификатов в CentOS

Думаю многие сталкивались с ситуацией, когда linux не распознает корректно подписанные сертификаты при использовании https

Например:
$ wget  'https://github.com'
--2011-12-30 20:45:26--  https://github.com/
Resolving github.com... 207.97.227.239
Connecting to github.com|207.97.227.239|:443... connected.
ERROR: cannot verify github.com's certificate, issued by `/C=US
/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV CA-1':
  Unable to locally verify the issuer's authority.
To connect to github.com insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.
$ git clone https://github.com/rails/rails
Cloning into rails...
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify
failed while accessing https://github.com/rails/rails/info/refs
fatal: HTTP request failed

Это происходит из-за отсутствия в файле ca-bundle.crt корневого сертификата центра, подписавшего сертификат сайта. В случае с github отсутствует сертификат фирмы DigiCert Inc.

Для решения этой проблемы нужно обновить ca-bundle с сайта curl:
  curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt 

Причем обновление пакета openssl не затирает этот файл:
Running Transaction
  Updating       : openssl                                                1/4 
warning: /etc/pki/tls/certs/ca-bundle.crt created as /etc/pki/tls/certs/ca-bundle.crt.rpmnew