openLDAP ssl/tls Centos 6.3
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Pondělí Březen 17 15:56:13 CET 2014
On Mon, 17 Mar 2014, Katerina Bubenickova wrote:
> Aktualizovala jsem, než jsem začala úpravy - hned po naklonování
> serveru. [...]
Aha... vskutku máte aktuální verzi. Přehlédnul jsem, že citovaný kus kódu
je z úplně jiného místa, než jsem očekával. Omlouvám se.
>> -12285 je SSL_ERROR_NO_CERTIFICATE
> Ne, že bych to byla někdy schopna zopakovat sama, ale čistě ze
> zvědavosti - kde se tenhle popis chyb najde?
V dokumentaci k NSS je k nalezení taková pěkná tabulka:
<https://developer.mozilla.org/en-US/docs/NSS/SSL_functions/sslerr.html>
Ovšem pro obecné kódy z NSPR jsem našel jen seznam bez kódů:
<https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSPR/API_Reference/NSPR_Error_Handling>
a musel jsem si to najít ve zdrojácích (prerror.h).
> spustila jsem
> /usr/lib64/nss/unsupported-tools/selfserv -d /etc/openldap/certs -n
> Server-Cert -p 12345 -f /etc/openldap/certs/tmp/pwdfile
> [...]
> Je zajímavé, že stejný výstup měl příkaz openssl s_client ... i bez
> parametru -f, i když jsem tam napsala špatnou cestu k pwdfile, i když už
> to bylo správně...
To je skutečně zajímavé. To podle mne znamená, že v databázi máte privátní
klíč v nešifrované podobě (což není úplně dobré).
> kromě problému,
> Missing separate debuginfos, use: debuginfo-install
> sqlite-3.6.20-1.el6.x86_64
> vidím také
> /usr/include/bits/string3.h: No such file or directory - to tam opravdu
> není. Je to potřeba?
Myslím, že není.
> Krokování tlsm_deferred_ctx_ini:
> [...]
>> (gdb)
>> SECMOD_RestartModules (force=0) at pk11util.c:1520
>> 1520 return SECFailure;
Toto vypadá spíš jako tlsm_deferred_init bez "ctx". Ale to nevadí, to se
také musí provést. (Vypadá to, že funkce bez ctx se volá jen z funkce
s ctx, tak jí asi kompilátor inlajnoval.)
>> tlsm_deferred_init (arg=0x7fbc48002600) at tls_m.c:1804
>> 1804 if (initctx != NULL) {
>> (gdb)
>> 1799 initctx = NSS_InitContext( realcertdir, prefix, prefix, SECMOD_DB,
>> (gdb)
>> 1804 if (initctx != NULL) {
>> (gdb)
Ať už to předtím provádělo jakékoli běsy, tak ty asi nakonec proběhly
nějak úspěšně.
>> 1805 certdb_slot = tlsm_init_open_certdb(ctx, realcertdir, prefix);
>> (gdb)
>> 1806 if (certdb_slot) {
>> (gdb)
>> 1808 ctx->tc_initctx = initctx;
>> (gdb) print PR_GetError()
>> $215 = -12285
Ale tady je to nějaká podivnost. PR_GetError() sice vrací novou hodnotu,
ale jinak to vypadá, jako by pokračoval. Je možné, že PR_GetError()
podobně jako errno může obsahovat zmatečné hodnoty, pokud funkce
neindikuje, že došlo k chybě, návratovou hodnotou. Doporučil bych ještě
pokračovat až k místu, kde to skutečně vzdá.
Jiná možnost by byla zkusit místo NSS databáze přece jen použít klíče a
certifikáty v souborech a la OpenSSL. Sice jsem psal, že podle nového
světového pořádku by to mělo být v db, ale když koukám na ty zdrojáky, tak
to vypadá, že podporují i PEM (je k tomu potřeba knihovna nsspem.so, ale
zdá se, že je přibalena v balíku nss). Nicméně to bych asi zkoušel až jako
kdyby nepomohlo nic jiného.
--
Pavel Kankovsky aka Peak / Jeremiah 9:21 \
"For death is come up into our MS Windows(tm)..." \ 21st century edition /
Další informace o konferenci Linux