Зміст

KB0002

Проблема

У системному журналі вузла WMS/LB періодично з'являється таке критичне повідомлення:

FATAL    SECURITY - Failed to load GSI credential:
edg_wll_gss_acquire_cred_gsi(): GSS Major Status: General failure(
GSS Minor Status Error Chain: globus_gsi_gssapi: Unable to read credential for import 
OpenSSL Error: tasn_dec.c:749: in library: asn1 encoding routines,
function ASN1_TEMPLATE_NOEXP_D2I: nested asn1 error Field=n, Type=RSA
OpenSSL Error: tasn_dec.c:830: in library: asn1 encoding routines, function ASN1_D2I_EX_PRIMITIVE: nested asn1 error
OpenSSL Error: tasn_dec.c:1306: in library: asn1 encoding routines, function ASN1_CHECK_TLEN: wrong tag 
), exiting.

Застосовність

Проблема проявляється як у Java-сервісах, так і у C-сервісах.

Підтверджено її наявність у релізах EMI-1: WMS, LB, CREAM, dCache.

У dCache її нещодавно виправили: SVN-diff

Причина

Закритий ключ сертифіката вузла (hostkey.pem) записаний у непідтримуваному форматі PKCS#8. На це вказуватиме перший рядок файла:

Заголовок блоку PEM-файла Формат Рішення
-----BEGIN PRIVATE KEY----- PKCS#8 наш випадок :-)
-----BEGIN RSA PRIVATE KEY----- SSLeay проблема у чомусь іншому

Пояснення

Пакет OpenSSL версій нижче за 1.0.0 використовував власний формат SSLeay для зберігання закритого ключа RSA у PEM-кодуванні, що став де-факто стандартом. Його підтримку реалізовано у багатьох пакетах засобів шифрування, зокрема власне OpenSSL, GNUTLS, Mozilla NSS, Java™-бібліотека Bouncy Castle. Ці бібліотеки застосовуються у багатьох компонентах Middleware.

Починаючи з версії 1.0.0 у пакеті OpenSSL для зберігання закритого ключа за замовчуванням використовується формат PKCS#8, який є офіційним стандартом та більш універсальний за вмістом — підтримуються різні алгоритми шифрування, а не тільки RSA. Проблема полягає в тому, що більшість згаданих бібліотек, а особливо їх старі версії, не підтримують PKCS#8.

Вирішення

Перетворення форматів SSLeay у PKCS#8 та навпаки для закритого ключа RSA є однозначним та оборотним. Щоб перетворити PKCS#8 у SSLeay, можна скористатись такою командою:

openssl rsa -in pkcs8.pem -out ssleay.pem

де pkcs8.pem — вхідний файл у форматі PKCS#8, а ssleay.pem — результат у форматі SSLeay.

УВАГА! Після перетворення формату закритого ключа обов'язково перевіряйте права доступу на відповідні файли.

Євген Слюсар 2012/04/09 00:28