标签: winhttp

如何让ASP.NET访问证书存储区中的证书中的私钥?

我有一个ASP.NET应用程序访问证书存储区中的证书中的私钥.在Windows Server 2003上,我能够使用winhttpcertcfg.exe来授予对NETWORK SERVICE帐户的私钥访问权限.如何授予访问IIS 7.5网站中Windows Server 2008 R2上的证书存储(本地计算机\个人)中的证书中的私钥的权限?

我尝试使用证书MMC(Server 2008 R2)为"Everyone","IIS AppPool\DefaultAppPool","IIS_IUSRS"以及我能找到的每个其他安全帐户提供完全信任访问权限.但是,下面的代码演示了代码无法访问使用私钥导入的证书的私钥.每次访问私钥属性时,代码都会抛出并抛出错误.

Default.aspx的

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater ID="repeater1" runat="server">
            <HeaderTemplate>
                <table>
                    <tr>
                        <td>
                            Cert
                        </td>
                        <td>
                            Public Key
                        </td>
                        <td>
                            Private Key
                        </td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                    <%#((X509Certificate2)Container.DataItem).GetNameInfo(X509NameType.SimpleName, false) %>
                    </td>
                    <td>
                    <%#((X509Certificate2)Container.DataItem).HasPublicKeyAccess() %>
                    </td>
                    <td>
                    <%#((X509Certificate2)Container.DataItem).HasPrivateKeyAccess() %>
                    </td>
                </tr> …

asp.net certificate winhttp iis-7.5

108
推荐指数
5
解决办法
15万
查看次数

通过Windows命令行设置代理,包括登录参数

我想通过命令行设置代理,我发现的第一件事是你必须运行具有管理员权限的命令行 - 然后基本代理集将是:

netsh winhttp set proxy SERVER:PORT
Run Code Online (Sandbox Code Playgroud)

这很好用,但我也想添加一个登录名.你可以看到我尝试过使用netsh-> winhttp,但是手册没有说明登录部分,所以我试过:

netsh winhttp set proxy user:password@SERVER:PORT
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这不起作用.是否有可能在netsh-> winhttp中实现这样的目标?

如果是这样,怎么样?如果不是=>我应该遵循哪些Windows命令?
或者这更容易̶a̶c̶h̶i̶e̶v̶e̶a̶b̶l̶e̶通过一些WINDOWSAPI̶(例如,使用C/C + +̶̶)̶?̶

感谢您的帮助,如果不清楚,请随时提出任何问题.

使用:Windows 7,cmd.exe,netsh-> winhttp

编辑:这看起来像C++方式:http://msdn.microsoft.com/en-us/library/windows/desktop/aa383144(v=vs.85).aspx,但更好的方式C++可能会去这样:http://msdn.microsoft.com/en-us/library/windows/desktop/aa385384(v = vs.85).aspx#general_option, - 所以剩下的问题是如何在命令行中实现这一点(甚至更好的命令行 - > netsh-> winhttp)?

windows proxy cmd winhttp netsh

21
推荐指数
4
解决办法
12万
查看次数

Msxml2.ServerXMLHTTP和WinHttp.WinHttpRequest之间的区别?

就在我终于理解了Msxml2.XMLHTTP和Msxml2.ServerXMLHTTP之间的区别时

http://support.microsoft.com/kb/290761

XMLHTTP专为客户端应用程序而设计,依赖于基于Microsoft Win32 Internet(WinInet)构建的URLMon.ServerXMLHTTP专为服务器应用程序而设计,依赖于新的HTTP客户端堆栈WinHTTP.ServerXMLHTTP提供可靠性和安全性,并且是服务器安全的.有关更多信息,请参阅MSXML软件开发工具包(SDK)文档.

我突然发现WinHttp.WinHttpRequest ......

http://msdn.microsoft.com/en-us/library/aa382925(VS.85).aspx

Microsoft Windows HTTP服务(WinHTTP)为开发人员提供了HTTP/1.1 Internet协议的服务器支持的高级接口.WinHTTP主要用于与HTTP服务器通信的服务器应用程序,主要用于基于服务器的方案.

那么,这与Msxml2.ServerXMLHTTP有何不同?

(好吧,隐含的问题是我应该使用哪一个...)

xmlhttprequest serverxmlhttp winhttp httpwebrequest winhttprequest

15
推荐指数
1
解决办法
2万
查看次数

获取winhttp.h的推荐方法是什么?

我们的应用程序使用libcurl for HTTP,我们希望能够访问Internet Explorer的代理设置.早期的Stack Overflow问题建议我们使用WinHttpGetIEProxyConfigForCurrentUserWinHttpGetProxyForUrl.

遗憾的是,winhttp.h我们的副本Visual C++ 2005或Visual Studio 2008似乎没有包含标题.显然,可以下载更新的Platform SDK并将其安装在Visual C++ 2005中,但这是一个非常痛苦的过程,它不会不一定适用于较新版本的Visual Studio.

是否有一种良好的,受到良好支持的方式从C++访问WinHTTP 5.1 API?或者我们应该避免使用这些API?

c++ windows sdk proxy winhttp

10
推荐指数
2
解决办法
1万
查看次数

如何在C/C++下使用WinHTTP下载文件?

我知道如何下载html/txt页面.例如 :

//Variables 
DWORD dwSize = 0;
DWORD dwDownloaded = 0;
LPSTR pszOutBuffer;
vector <string>  vFileContent;
BOOL  bResults = FALSE;
HINTERNET  hSession = NULL, 
           hConnect = NULL,
           hRequest = NULL;

// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen( L"WinHTTP Example/1.0",  
                        WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                        WINHTTP_NO_PROXY_NAME, 
                        WINHTTP_NO_PROXY_BYPASS, 0);

// Specify an HTTP server.
if (hSession)
    hConnect = WinHttpConnect( hSession, L"nytimes.com",
                               INTERNET_DEFAULT_HTTP_PORT, 0);

// Create an HTTP request handle.
if (hConnect)
    hRequest = WinHttpOpenRequest( hConnect, L"GET", L"/ref/multimedia/podcasts.html",
                                   NULL, WINHTTP_NO_REFERER, 
                                   NULL, 
                                   NULL);

// …
Run Code Online (Sandbox Code Playgroud)

c c++ windows http winhttp

10
推荐指数
3
解决办法
2万
查看次数

如何从WinHttp请求获取HTTP状态代码?

msdn上的此页面包含可能在WinHTTP中使用的HTTP状态代码的定义.有没有办法从WinHttp中的请求中检索HTTP状态代码?

我发现获取响应文本的唯一方法是调用WinHttpQueryHeaders,它返回HTTP响应,如下所示:

HTTP/1.1 404 Not Found
Date: Wed, 28 May 2014 08:20:29 GMT
Content-Length: 0
Server: Microsoft-HTTPAPI/2.0
Run Code Online (Sandbox Code Playgroud)

我是否必须自己解析此字符串以获取状态代码,或者WinHttp已经提供了某种方法来执行此操作?

winhttp

10
推荐指数
1
解决办法
4296
查看次数

WinHttp Delphi包装器

请告知Delphi XE中是否有WinHTTP包装器

按优先顺序排列:

  1. 一个开箱即用的Delphi单元
  2. 带有移植入口例程的第三方开源pas文件
  3. 一个xxx_TLB.pas包装器

解:

由于评论不允许格式化代码,我在问题中粘贴了解决方案:

const
  winhttpdll = 'winhttp.dll';

  WINHTTP_ACCESS_TYPE_DEFAULT_PROXY = 0;
  WINHTTP_FLAG_REFRESH              = $00000100;
  WINHTTP_FLAG_SECURE               = $00800000;
  WINHTTP_ADDREQ_FLAG_COALESCE      = $40000000;
  WINHTTP_QUERY_FLAG_NUMBER         = $20000000;

function WinHttpOpen(pwszUserAgent: PWideChar; dwAccessType: DWORD;
  pwszProxyName, pwszProxyBypass: PWideChar; dwFlags: DWORD): HINTERNET; stdcall; external winhttpdll;
function WinHttpConnect(hSession: HINTERNET; pswzServerName: PWideChar;
  nServerPort: INTERNET_PORT; dwReserved: DWORD): HINTERNET; stdcall; external winhttpdll;
function WinHttpOpenRequest(hConnect: HINTERNET; pwszVerb: PWideChar;
  pwszObjectName: PWideChar; pwszVersion: PWideChar; pwszReferer: PWideChar;
  ppwszAcceptTypes: PLPWSTR; dwFlags: DWORD): HINTERNET; stdcall; external winhttpdll;
function WinHttpCloseHandle(hInternet: HINTERNET): BOOL; stdcall; external winhttpdll; …
Run Code Online (Sandbox Code Playgroud)

delphi winhttp wrapper delphi-xe

9
推荐指数
2
解决办法
7879
查看次数

如何使用WinHTTP通过自签名证书执行SSL

我似乎遇到了这个问题,并且本着一个可以被其他人引用的通用问题的精神,我正在寻找一个使用SSL的好例子.

更具体地说,我从WinHttpSendRequest获取错误0x00002F8F,这是ERROR_INTERNET_DECODING_FAILED(这向我表明它是一个证书错误).我已经在这台机器上导入了证书,并且能够在没有证书错误的情况下在IE中启动页面.

我正在使用的代码就在这里.

TLDR:如何将WinHTTP与自签名证书一起使用?

c c++ ssl winapi winhttp

8
推荐指数
1
解决办法
9276
查看次数

在Windows服务中运行cdb时无法下载微软符号

我有一个.NET Windows服务,它调用cdb.exe来分析崩溃转储.我想在需要时使用以下参数自动从http://msdl.microsoft.com下载符号:

-y srv*c:\symbols*http://msdl.microsoft.com/download/symbols
Run Code Online (Sandbox Code Playgroud)

如果我将应用程序作为控制台应用程序运行,它按预期工作,并为每个转储下载所需的符号.

问题是,当我将应用程序作为Windows服务启动时,符号不会被下载,如果我打开symnoisy,在cdb的输出日志中,我有一个条目,表示在http:/处找不到该符号/msdl.microsoft.com

所以,我使用嗅探器检查了它,有趣的是,当作为服务运行时,没有请求微软符号服务器.

谷歌搜索了一下,我发现我不是唯一一个有这个问题的人,似乎问题是当一个应用程序作为Windows服务运行时,它使用winHTTP库来进行http请求,而不是wininet,我认为是问题的根源:http://support.microsoft.com/kb/238425

所以,我不知道为什么,cdb无法使用winHTTP库连接到ms符号服务器,我需要一种强制cdb默认使用wininet的方法.

任何人都知道这个问题的解决方法?

windows-services symbols windbg wininet winhttp

7
推荐指数
1
解决办法
1142
查看次数

WinHttp.WinHttpRequest添加到内容类型

我正在尝试使用vba WinHttp.WinHttpRequest向kigo的api发出请求,我能够发送请求,但WinHttpRequest在发送请求时更改添加Charset = UTF-8的内容类型,其中kigo的api返回415错误.

我像这样设置内容类型

web_Http.SetRequestHeader "Content-Type", "application/json"
Run Code Online (Sandbox Code Playgroud)

但当我在Wireshark中查看请求时,内容类型就是这样的

Content-Type: application/json; Charset=UTF-8
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

我找到了这个,这与我的问题类似,但我不明白解决方案.

ms-access vba winhttp winhttprequest

7
推荐指数
1
解决办法
4809
查看次数