====== 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 її нещодавно виправили: [[http://scm.dcache.org/WebSVN/comp.php?repname=dCache&compare[]=%2F@16697&compare[]=%2F@16698|SVN-diff]]
===== Причина =====
Закритий ключ сертифіката вузла (''hostkey.pem'') записаний у непідтримуваному форматі PKCS#8.
На це вказуватиме перший рядок файла:
^ Заголовок блоку PEM-файла ^ Формат ^ Рішення ^
| ''%%-----BEGIN PRIVATE KEY-----%%'' | PKCS#8 | наш випадок :-) |
| ''%%-----BEGIN RSA PRIVATE KEY-----%%'' | SSLeay | проблема у чомусь іншому |
===== Пояснення =====
Пакет OpenSSL версій нижче за 1.0.0 використовував власний формат [[http://www.openssl.org/docs/crypto/pem.html#PEM_ENCRYPTION_FORMAT|SSLeay]] для зберігання закритого ключа RSA у PEM-кодуванні, що став де-факто стандартом.
Його підтримку реалізовано у багатьох пакетах засобів шифрування, зокрема власне [[http://www.openssl.org|OpenSSL]], [[http://www.gnu.org/software/gnutls/|GNUTLS]], [[http://www.mozilla.org/projects/security/pki/nss/|Mozilla NSS]], Java(tm)-бібліотека [[http://www.bouncycastle.org|Bouncy Castle]].
Ці бібліотеки застосовуються у багатьох компонентах Middleware.
Починаючи з версії 1.0.0 у пакеті OpenSSL для зберігання закритого ключа за замовчуванням використовується формат [[http://www.rsa.com/rsalabs/node.asp?id=2130|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.
**УВАГА!** Після перетворення формату закритого ключа обов'язково перевіряйте права доступу на відповідні файли.
--- //[[people:slu|Євген Слюсар]] 2012/04/09 00:28//