我有一个asp.net mvc应用程序。在Windows Server 2008 R2和framework 4.5上运行。 在一个控制器上。我通过https频道将httpclient post xml用于远程soap服务器。但很慢。完成请求需要6秒钟。我启用CAPI2日志。发现错误:
> System
>
> - Provider
>
> [ Name] Microsoft-Windows-CAPI2
> [ Guid] {5bbca4a8-b209-48dc-a8c7-b23d3e5216fb}
>
> EventID 53
>
> Version 0
>
> Level 2
>
> Task 53
>
> Opcode 2
>
> Keywords 0x4000000000000036
>
> - TimeCreated
>
> [ SystemTime] 2013-03-06T00:09:12.342400000Z
>
> EventRecordID 226
>
> Correlation
>
> - Execution
>
> [ ProcessID] 4716
> [ ThreadID] 3620
>
> Channel Microsoft-Windows-CAPI2/Operational
>
> Computer WIN-PFVACQLB4A9
>
> - Security
>
> [ UserID] S-1-5-82-100694679-852442941-408577778-1461352480-452402374
>
>
>- UserData
>
> - CryptRetrieveObjectByUrlWire
>
> - URL http://gtssldv-aia.geotrust.com/gtssldv.crt
>
> [ scheme] http
>
> - Object
>
> [ type] CONTEXT_OID_CERTIFICATE
> [ constant] 1
>
> Timeout PT15S
>
> - Flags
>
> [ value] 286005
> [ CRYPT_RETRIEVE_MULTIPLE_OBJECTS] true
> [ CRYPT_WIRE_ONLY_RETRIEVAL] true
> [ CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL] true
> [ CRYPT_OFFLINE_CHECK_RETRIEVAL] true
> [ CRYPT_AIA_RETRIEVAL] true
> [ CRYPT_PROXY_CACHE_RETRIEVAL] true
>
> - AuxInfo
>
> [ maxUrlRetrievalByteCount] 100000
> [ fProxyCacheRetrieval] true
>
> - AdditionalInfo
>
> - NetworkConnectivityStatus
>
> [ value] 1
> [ _SENSAPI_NETWORK_ALIVE_LAN] true
>
> - Action
>
> [ name] Call_WinHttpGetProxyForUrl
> - Error The Proxy Auto-configuration URL was not found.
>
> [ value] 2F94
>
>
> - Action
>
> [ name] NoProxy
>
> - Action
>
> [ name] Call_WinHttpGetProxyForUrl
> + Error The Proxy Auto-configuration URL was not found.
>
> [ value] 2F94
>
>
> - Action
>
> [ name] NoProxy
>
> - HTTPRequestHeadersInfo
>
> Header GET /gtssldv.crt HTTP/1.1
>
> Header Accept: */*
>
> Header User-Agent: Microsoft-CryptoAPI/6.1
>
> Header Connection: Keep-Alive
>
>
> - HTTPResponseHeadersInfo
>
> Header HTTP/1.0 200 OK
>
> Header Connection: Keep-Alive
>
> Header Date: Tue, 05 Mar 2013 23:43:39 GMT
>
> Header Via: NS-248
>
> Header Via: 1.0 hostname:80 (squid/2.6.STABLE21)
>
> Header Content-Length: 1022
>
> Header Content-Type: text/plain
>
> Header Last-Modified: Wed, 21 Jul 2010 18:25:03 GMT
>
> Header Accept-Ranges: bytes
>
> Header Age: 540
>
> Header ETag: "25f7fb-3fe-48be9eb969dc0"
>
> Header Server: Apache/2.2.3 (Red Hat)
>
> Header X-Pad: avoid browser bug
>
> Header X-Cache: MISS from hostname
>
> Header X-Cache-Lookup: HIT from hostname:80
>
>
> - Action
>
> [ name] WriteToCache
> - Error The system cannot find the file specified.
>
> [ value] 80070002
>
>
>
> - CacheInfo
>
> [ lastSyncTime] 2013-03-06T00:09:12.342Z
> - URLCacheResponseInfo
>
> [ responseType] CRYPTNET_URL_CACHE_RESPONSE_HTTP
> [ lastModifiedTime] 2010-07-21T18:25:03Z
> [ eTag] "25f7fb-3fe-48be9eb969dc0"
> [ proxyId] DEAE4085
>
>
> - RetrievedObjects
>
> - Certificate
>
> [ fileRef] BAE30B15DBB1544CF194D076B75B7BB9E3D6B760.cer
> [ subjectName] GeoTrust DV SSL CA
>
>
> - EventAuxInfo
>
> [ ProcessName] w3wp.exe
>
> - CorrelationAuxInfo
>
> [ TaskId] {2B4FC750-01D1-4D7E-BEEF-A3F9DD09B0E8}
> [ SeqNumber] 4
>
> - Result
>
> [ value] 0
我也取消选中Internet Exploer-> Internet Opitions-> Connections-> LAN Settings->自动检测设置。没什么变化。
寻求帮助。
由于
答案 0 :(得分:1)
可能现在为时已晚,但我解决同样问题的方法是找到用户ID,在你的情况下:
[ UserID] S-1-5-82-100694679-852442941-408577778-1461352480-452402374
在注册表中,位于以下位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList .
它会告诉你哪个用户正在调用Crypto API 2(CAPI2),在我的例子中是“Classic .NET Application Pool”或类似的。
我通过冒充来修复它(以具有足够权限的另一个用户身份运行该进程),然后我没有这个写入错误,因此没有事件日志中的红色错误消息。
为此,我在本地计算机上创建了一个具有管理员权限的用户(我知道它不是最安全的选项,但我必须尝试,并且它有效)。最后,似乎问题是代理,但是那个特定的错误:。
> [ name] WriteToCache
> - Error The system cannot find the file specified.
>
> [ value] 80070002
>
它在某处没有写权限,但管理员会这样做:P
我还做了另一件事(因为加密API总是请求CRL),在本地组策略编辑器中,遵循以下路径:
计算机配置> Windows设置>安全设置>公钥>证书路径验证设置> “撤销”标签。启用“定义这些策略设置”并启用“允许CRL和OCSP响应有效期超过其生命周期”。
然后我将这个CRL的有效期延长到一年(8760小时),我知道它也太长了,但这取决于你的需求或安全问题,在我的情况下是足够安全的。
我希望它可以帮助你
答案 1 :(得分:0)
设置IIS服务器,使其在http://wpad.mylab.local/wpad.dat内使用javascript进行响应 - 不要忘记为wpad.dat添加MIME类型(application / x-javascript很好)。如果您不需要代理,那么wpad.dat文件中的javascript应如下所示:
function FindProxyForURL(url, host)
{
return "DIRECT";
}
之后,使用certutil时,CAPI2日志中不应再有事件53。