Статус: Участник
Группы: Участники
Зарегистрирован: 26.02.2014(UTC) Сообщений: 26 Откуда: Москва Поблагодарили: 4 раз в 4 постах
|
Последнюю неделю наблюдаю очень странную проблему. Код, который подписывает и шифрует файлы начал валится, причем не на уровне .NET, а на уровне unmanaged кода системы. Код:Faulting application name: w3wp.exe, version: 8.5.9600.16384, time stamp: 0x5215df96
Faulting module name: ntdll.dll, version: 6.3.9600.18233, time stamp: 0x56bb4ebb
Exception code: 0xc0000374
Fault offset: 0x00000000000f1b70
Faulting process id: 0x1a74
Faulting application start time: 0x01d1c84cc41f6f90
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: 2d491651-3440-11e6-83a6-ec2280eba695
Faulting package full name:
Faulting package-relative application ID:
Странность проблемы заключается в том, что: * на N-ую попытку подписание/шифрование завершается успешно * мы давно ничего не меняли, в том числе не менялся сертификат в адрес которого производится шифрование * проявляется как на сервере (win 2012 r2) так и на компьютере разработчика (win 8.1 x64) * проявляется на разном уровне обновленности Windows (на компьютере разработчика стоят все обновления, сервер квартал не обновляли) * проявляется на разных версиях CSP (обновление CSP, .NET Client/Server до последних версий не помогло) Код, который занимается подписью и шифрованием примитивен и использует встроенные в .NET средсва для работы с CMS. Один подписант, один получатель. Код: Public Function CmsSign(Content As Byte(), Detached As Boolean, Silent As Boolean, ParamArray Signers As System.Security.Cryptography.X509Certificates.X509Certificate2()) As Byte()
Dim SCms = New System.Security.Cryptography.Pkcs.SignedCms(New System.Security.Cryptography.Pkcs.ContentInfo(Content), detached:=Detached)
For Each Signer In Signers
Dim CmsSigner = New System.Security.Cryptography.Pkcs.CmsSigner(Signer)
SCms.ComputeSignature(CmsSigner, silent:=Silent)
Next
Return SCms.Encode
End Function
Public Function CmsEncrypt(Content As Byte(), ParamArray Recipients As System.Security.Cryptography.X509Certificates.X509Certificate2()) As Byte()
Dim ECms = New System.Security.Cryptography.Pkcs.EnvelopedCms(New System.Security.Cryptography.Pkcs.ContentInfo(content))
Dim CmsRecipients = New System.Security.Cryptography.Pkcs.CmsRecipientCollection()
For Each Recipient In Recipients
CmsRecipients.Add(New System.Security.Cryptography.Pkcs.CmsRecipient(Recipient))
Next
Call ECms.Encrypt(CmsRecipients)
Return ECms.Encode
End Function
От версии, как я уже говорил, не зависит, последняя на которой проявляется: "CSPSetup-3.9R2 (3.9.8423) от 14.04.2016" и "NETSetup 1.0.5913.0 от 10.03.2016". Если бы проблема была на стороне .NET, я бы разобрал её до винтиков... а в случае unmanaged не хватает экспертизы, даже не представляю куда копать. Подскажите, пожалуйста, как можно локализовать проблему? На машине разработчика удалось получить вот такой stack-trace, но какой из него можно сделать вывод не понимаю: Код:> ntdll.dll!RtlReportCriticalFailure() Unknown
ntdll.dll!RtlpHeapHandleError() Unknown
ntdll.dll!RtlpLogHeapFailure() Unknown
ntdll.dll!RtlFreeHeap() Unknown
KernelBase.dll!LocalFree() Unknown
cryptnet.dll!PkiFree() Unknown
cryptnet.dll!OcspFreeStrongSignPropInfo(struct _OCSP_STRONG_SIGN_PROP_INFO *) Unknown
cryptnet.dll!I_ValidateOcspResponse() Unknown
cryptnet.dll!I_RetrieveObjectByOcspUrlValidForSubject() Unknown
cryptnet.dll!RetrieveObjectByOcspUrlValidForSubject() Unknown
cryptnet.dll!RetrieveTimeValidObjectByUrl() Unknown
cryptnet.dll!CTVOAgent::GetTimeValidObjectByUrl() Unknown
cryptnet.dll!CTVOAgent::GetTimeValidObject() Unknown
cryptnet.dll!CrlFromCertGetTimeValidObject(char const *,void *,struct _CERT_CONTEXT const *,struct _FILETIME *,unsigned long,unsigned long,void * *,struct _CRYPT_CREDENTIALS *,struct _CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO *) Unknown
cryptnet.dll!GetTimeValidCrl() Unknown
cryptnet.dll!MicrosoftCertDllVerifyRevocation() Unknown
crypt32.dll!VerifyDefaultRevocation() Unknown
crypt32.dll!CertVerifyRevocation() Unknown
crypt32.dll!CChainPathObject::CalculateRevocationStatus() Unknown
crypt32.dll!CChainPathObject::CalculateAdditionalStatus() Unknown
crypt32.dll!CCertChainEngine::CreateChainContextFromPathGraph() Unknown
crypt32.dll!CCertChainEngine::GetChainContext() Unknown
crypt32.dll!CertGetCertificateChain() Unknown
System.ni.dll!00007ffea40eead1() Unknown
System.ni.dll!00007ffea4036144() Unknown
System.ni.dll!00007ffea40bf524() Unknown
System.Security.ni.dll!00007ffea18eb314() Unknown
System.Security.ni.dll!00007ffea19162f1() Unknown
System.Security.ni.dll!00007ffea1915f33() Unknown
00007ffe46f9db91() Unknown
00007ffe46f9da4a() Unknown
00007ffe46f9ab2a() Unknown
00007ffe46f73a82() Unknown
00007ffe46f70bc7() Unknown
00007ffe46f70565() Unknown
00007ffe46f12ce2() Unknown
System.ServiceModel.ni.dll!00007ffea29e2967() Unknown
System.ServiceModel.ni.dll!00007ffea2a2f02f() Unknown
System.ServiceModel.ni.dll!00007ffea2a05b78() Unknown
System.ServiceModel.ni.dll!00007ffea2a05030() Unknown
System.ServiceModel.ni.dll!00007ffea2a2b4bc() Unknown
System.ServiceModel.ni.dll!00007ffea2a6ec65() Unknown
System.ServiceModel.ni.dll!00007ffea2a7012c() Unknown
System.ServiceModel.ni.dll!00007ffea2a6e661() Unknown
System.ServiceModel.ni.dll!00007ffea2a703c6() Unknown
System.ServiceModel.Internals.ni.dll!00007ffea0f7ec8b() Unknown
System.ServiceModel.Internals.ni.dll!00007ffea0f15341() Unknown
System.ServiceModel.Internals.ni.dll!00007ffea0f6b187() Unknown
System.ServiceModel.Internals.ni.dll!00007ffea0f6a78a() Unknown
System.ServiceModel.Internals.ni.dll!00007ffea0f6973c() Unknown
System.ServiceModel.ni.dll!00007ffea2b748df() Unknown
System.ServiceModel.ni.dll!00007ffea2b687d8() Unknown
System.ServiceModel.ni.dll!00007ffea2b68723() Unknown
System.ServiceModel.Internals.ni.dll!00007ffea0f6500f() Unknown
System.ServiceModel.ni.dll!00007ffea2b5ebb0() Unknown
System.ServiceModel.ni.dll!00007ffea2b24912() Unknown
System.ServiceModel.ni.dll!00007ffea2af8e84() Unknown
System.ServiceModel.Activation.ni.dll!00007ffe66b031e5() Unknown
System.ServiceModel.Activation.ni.dll!00007ffe66b001de() Unknown
System.ServiceModel.Activation.ni.dll!00007ffe66aff66f() Unknown
System.ServiceModel.Activation.ni.dll!00007ffe66aff5ac() Unknown
System.ServiceModel.Internals.ni.dll!00007ffea0f17e66() Unknown
System.ServiceModel.Internals.ni.dll!00007ffea0f17dc8() Unknown
mscorlib.ni.dll!00007ffea501df12() Unknown
clr.dll!CallDescrWorkerInternal() Unknown
clr.dll!CallDescrWorkerWithHandler() Unknown
clr.dll!DispatchCallSimple() Unknown
clr.dll!BindIoCompletionCallBack_Worker(void *) Unknown
clr.dll!ManagedThreadBase_DispatchInner() Unknown
clr.dll!ManagedThreadBase_DispatchMiddle() Unknown
clr.dll!ManagedThreadBase_DispatchOuter() Unknown
clr.dll!ManagedThreadBase_DispatchInCorrectAD() Unknown
clr.dll!Thread::DoADCallBack(struct ADID,void (*)(void *),void *,int) Unknown
clr.dll!ManagedThreadBase_DispatchInner() Unknown
clr.dll!ManagedThreadBase_DispatchMiddle() Unknown
clr.dll!ManagedThreadBase_DispatchOuter() Unknown
clr.dll!ManagedThreadBase_FullTransitionWithAD() Unknown
clr.dll!BindIoCompletionCallbackStubEx(unsigned long,unsigned long,struct _OVERLAPPED *,int) Unknown
clr.dll!BindIoCompletionCallbackStub(unsigned long,unsigned long,struct _OVERLAPPED *) Unknown
clr.dll!ThreadpoolMgr::CompletionPortThreadStart(void *) Unknown
clr.dll!Thread::intermediateThreadProc(void *) Unknown
kernel32.dll!BaseThreadInitThunk() Unknown
ntdll.dll!RtlUserThreadStart() Unknown
|