Статус: Участник
Группы: Участники
Зарегистрирован: 31.08.2017(UTC) Сообщений: 17 Откуда: Санкт-Петербург Поблагодарили: 1 раз в 1 постах
|
Автор: pd Автор: realmfoo При отладке через gdb заметил обращение к файлу /var/log/gost_capi.log, которого нет. В результате этого обращения ошибка регистрируется в OpenSSL. Код:Thread 7 "csp-sign" hit Breakpoint 4, ERR_put_error (lib=lib@entry=2, func=func@entry=1, reason=13, file=file@entry=0x7ffff76aeff8 "bss_file.c", line=line@entry=175) at err.c:704
704 err.c: No such file or directory.
(gdb) where
#0 ERR_put_error (lib=lib@entry=2, func=func@entry=1, reason=13, file=file@entry=0x7ffff76aeff8 "bss_file.c", line=line@entry=175) at err.c:704
#1 0x00007ffff75f1576 in BIO_new_file (filename=0x7ffff18bdb00 "/var/log/gost_capi.log", mode=0x7ffff18bdb87 "a+") at bss_file.c:175
#2 0x00007ffff18783fb in ngg_trace () from /opt/cprocsp/cp-openssl/lib/amd64/engines/libgost_capi.so
#3 0x00007ffff1879bb4 in ngg_asn1_public_key_bits_3410 () from /opt/cprocsp/cp-openssl/lib/amd64/engines/libgost_capi.so
#4 0x00007ffff1879bc9 in ngg_asn1_public_key_size_3410 () from /opt/cprocsp/cp-openssl/lib/amd64/engines/libgost_capi.so
#5 0x00007ffff793ebfc in xmlSecOpenSSLEvpSignatureExecute (transform=0x7fffe4002a40, last=1, transformCtx=<optimized out>) at evp_signatures.c:454
Разве файл логов не должен быть /var/opt/cprocsp/tmp/gost_capi.log ? Нет, теперь пишем в /var/log, но ошибка странная, разве openssl не должен этот файл создавать при отсутствии, проверим, исправим, спасибо. Так как программа запускается под обычным пользователем, а на папке /var/log установлены права 0775 (а где-то и 0755, владелец root), то создать файл никак не получится. При запуске программы, которая подписывает один и тот же запрос в несколько потоков наблюдаю нестабильную работу. В некоторых случаях подписать запрос не удаётся, а в stderr присутствует указание на ошибку с правами доступа: Код:
func=xmlSecOpenSSLEvpSignatureExecute:file=evp_signatures.c:line=466:obj=gostr34102001-gostr3411:subj=EVP_SignFinal:error=4:crypto library function failed:openssl error: 33558541: system library: fopen Permission denied
func=xmlSecTransformDefaultPushBin:file=transforms.c:line=1921:obj=gostr34102001-gostr3411:subj=xmlSecTransformExecute:error=1:xmlsec library function failed:final=1
func=xmlSecTransformIOBufferClose:file=transforms.c:line=2547:obj=gostr34102001-gostr3411:subj=xmlSecTransformPushBin:error=1:xmlsec library function failed:
func=xmlSecTransformC14NPushXml:file=c14n.c:line=243:obj=exc-c14n:subj=xmlOutputBufferClose:error=5:libxml2 library function failed:xml error: 0: NULL
func=xmlSecTransformCtxXmlExecute:file=transforms.c:line=1037:obj=exc-c14n:subj=xmlSecTransformPushXml:error=1:xmlsec library function failed:
func=xmlSecDSigCtxProcessSignatureNode:file=xmldsig.c:line=550:obj=unknown:subj=xmlSecTransformCtxXmlExecute:error=1:xmlsec library function failed:
func=xmlSecDSigCtxSign:file=xmldsig.c:line=286:obj=unknown:subj=xmlSecDSigCtxSignatureProcessNode:error=1:xmlsec library function failed:
При попытке отловить ошибку, в результате которой подписать запрос не удалось, получаю следующую информацию: Код:(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x00007ffff7b86910 in xmlSecError at errors.c:232
breakpoint already hit 1 time
(gdb) where
#0 xmlSecError (file=file@entry=0x7ffff7957980 "evp_signatures.c", line=line@entry=466, func=func@entry=0x7ffff7957c20 <__func__.16543> "xmlSecOpenSSLEvpSignatureExecute",
errorObject=0x7ffff7bbe300 <xmlSecNameGost2001GostR3411_94> "gostr34102001-gostr3411", errorSubject=errorSubject@entry=0x7ffff79579f4 "EVP_SignFinal", reason=reason@entry=4, msg=0x7ffff7954bc8 "openssl error: %lu: %s: %s %s")
at errors.c:232
#1 0x00007ffff793efcd in xmlSecOpenSSLEvpSignatureExecute (transform=0x7fffc4008950, last=<optimized out>, transformCtx=<optimized out>) at evp_signatures.c:465
#2 0x00007ffff7ba3373 in xmlSecTransformDefaultPushBin (transform=0x7fffc4008950, data=0x0, dataSize=0, final=1, transformCtx=0x7fffc4008710) at transforms.c:1917
#3 0x00007ffff7ba0036 in xmlSecTransformIOBufferClose (buffer=0x7fffc400d2c0) at transforms.c:2544
#4 0x00007ffff6f5b6a9 in xmlOutputBufferClose () from /usr/lib/x86_64-linux-gnu/libxml2.so.2
#5 0x00007ffff7b8320e in xmlSecTransformC14NPushXml (transform=0x7fffc4008860, nodes=0x7fffc400cca0, transformCtx=<optimized out>) at c14n.c:241
#6 0x00007ffff7ba2a5a in xmlSecTransformCtxXmlExecute (ctx=ctx@entry=0x7fffc4008710, nodes=nodes@entry=0x7fffc400cca0) at transforms.c:1034
#7 0x00007ffff7ba879c in xmlSecDSigCtxProcessSignatureNode (dsigCtx=dsigCtx@entry=0x7fffc4008450, node=node@entry=0x7fffc4002b50) at xmldsig.c:548
#8 0x00007ffff7ba90d4 in xmlSecDSigCtxSign (dsigCtx=0x7fffc4008450, tmpl=0x7fffc4002b50) at xmldsig.c:284
(gdb) call ERR_print_errors_fp(stdout)
140737224103568:error:0200100D:system library:fopen:Permission denied:bss_file.c:175:fopen('/var/log/gost_capi.log','a+')
140737224103568:error:2006D002:BIO routines:BIO_new_file:system lib:bss_file.c:180:
При этом в однопоточном режиме данная ошибка не возникает. В чём может быть причина подобной нестабильности?
|