среда, 9 апреля 2014 г.

139905006626448:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:pem_lib.c:818:

В процессе устранения CVE-2014-0160 дошел до обновления всех сертификатов на серверах. Поскольку уязвимость создает вероятность получения секретного ключа, то нужно сгенерировать сертификат заново.

$ openssl genrsa -out /etc/ssl/private/example.com.key 2048
$ chmod 0400 /etc/ssl/private/example.com.key
$ openssl req -new -out /etc/ssl/certs/example.com.csr -key /etc/ssl/private/example.com.key

Полученный файл example.com.csr нужно подписать у удостоверяющего центра. Мы пользуемся Thawte через посредника и в ответ на повторный выпуск сертификата пришел zip архив

$ unzip -l reissue.zip
Archive:  reissue.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     1744  2014-04-09 09:56   ServerCertificate.cer
     4815  2014-04-09 09:56   PKCS7.p7b
     1642  2014-04-09 09:56   CACertificate-1.cer
     1540  2014-04-09 09:56   CACertificate-2.cer
---------                     -------
     9741                     4 files

Файлы с расширением CER это сертификат в формате PEM. Перед установкой нового сертификата в веб-сервер проверяю его информацию

$ mkdir ssl-tmp
$ cd ssl-tmp
$ unzip ../reissue.zip
$ openssl x509 -in ServerCertificate.cer -text -noout
unable to load certificate
139905006626448:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:pem_lib.c:818:

Облом. OpenSSL отказывается читать сертификат, ссылаясь на неверное base64 кодирование. Открываю сертификат в текстовом редакторе и смотрю его глазами. В теле base64 есть пробелы! А ведь пробелов быть не должно... Попробовал сравнить содержимое с предыдущим сертификатом и нашел, что возможно по ошибке "+" заменился на " ". В качестве проверки делаю замену всех пробелов на "+" между строками "-----BEGIN CERTIFICATE-----" и "-----END CERTIFICATE-----".

После замены снова проверяю сертификат

$ openssl x509 -in ServerCertificate.cer -text -noout

В этот раз проверка прошла успешно, повторяю действия для CACertificate-1.cer и CACertificate-2.cer. И проверяю их аналогично. В конце останется только установить новый сертификат на сервере.

Комментариев нет:

Отправить комментарий