- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 .NET4.5 WebAPI 2 应用程序,它使用 SSL 客户端证书进行一些自定义安全相关检查。
在调试应用程序时,request.GetClientCertificate()
为任何服务调用返回 null
,无论我目前尝试了什么。
测试代码:
基本上,在我的服务端,我有一个类似这样的方法:
class CertificateChecker : ICertificateChecker
{
public bool Check(HttpRequestMessage request)
{
var cert = request.GetClientCertificate();
}
}
我使用 request.Properties.Add(HttpPropertyKeys.ClientCertificateKey, cert)
使用附加到请求的客户端证书进行单元测试通过(证书完全符合预期,验证有效,等等).
但是,当我使用调用实际 WebAPI 应用程序的 HttpClient
进行测试时,断点设置在服务端的 request.GetClientCertificate()
行,同一行返回 null。
这是我尝试过的:
客户端证书:
(基本上,关注了https://www.piotrwalat.net/client-certificate-authentication-in-asp-net-web-api-and-windows-store-apps/和类似的博客)
在我使用 HttpClient
调用服务的测试中,通过以下方式附加了客户端证书(均无效):
使用 WebRequestHandler
,将 ClientCertificateOptions
设置为 Manual,并将证书添加到 ClientCertificates
集合。
using (var handler = new WebRequestHandler())
{
var cert = GetTestCert();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ClientCertificates.Add(cert);
// and so on...
}
使用 HttpRequestMessage
,将证书添加为属性,并将键设置为 HttpPropertyKeys.ClientCertificateKey
(此方法适用于如上所述的单元测试)。
request.Properties.Add(HttpPropertyKeys.ClientCertificateKey, cert);
在这两种情况下,cert
变量都设置为预期的 X509Certificate2
对象。
托管:
IISExpress:尝试在 IISExpress 中运行应用。
编辑 applicationhost.config 并启用 iisClientCertificateMappingAuthentication
设置为“true”和以下访问设置(均无效):
<access sslFlags="Ssl, SslNegotiateCert" />
<access sslFlags="SslNegotiateCert" />
本地 IIS将 Web 应用程序设置为在本地计算机上的 IIS 中运行
Ssl、SslNegotiateCert
和 SslNegotiateCert
)(通过配置编辑器)在这两种情况下,当使用网络浏览器通过 https url 访问网络 api 时,我可以毫无问题地显示家庭 Controller 的索引 View (因此,服务器端证书是可信的)。
最佳答案
我知道它有点旧,但我遇到了同样的问题,我通过关注这篇文章解决了它:
https://improveandrepeat.com/2017/07/how-to-configure-iis-express-to-accept-ssl-client-certificates/
问题是 IIS 服务器上的配置,也可以在 IIS express 上修改。我报告它以防链接不可用。
For IIS change the server configuration file, for IIS Express modify the file under your solution located in .vs\config\applicationhost.config
Search for an xml element called inside a element:
<security>
<access sslFlags="None" />The default configuration has no support for SSL client certificates. You need to modify the sslFlags attribute to include these options: Ssl, SslNegotiateCert, SslRequireCert
<security>
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />The next step is to find the element :
<iisClientCertificateMappingAuthentication enabled="false"></iisClientCertificateMappingAuthentication>
If you change enabled to true, IIS Express will start accepting client certificates:
<iisClientCertificateMappingAuthentication enabled="true">
</iisClientCertificateMappingAuthentication>You now need to restart Visual Studio and IIS Express. IIS Express can be restarted using the icon in your system tray.
From now on you will be asked for a client certificate and you can debug the whole application inside Visual Studio. This may not look like a big improvement, but trust me, it makes debugging much simpler.
希望这可以帮助其他人:-)
关于c# - HttpRequestMessage.GetClientCertificate() 在 Web API 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22817965/
最近开始学习oracle和sql。 在学习的过程中,我遇到了几个问题,我的 friend 在接受采访时被问到这些问题。 SELECT * FROM Employees WHERE NULL IS N
这个问题在这里已经有了答案: Can we subtract NULL pointers? (4 个回答) 关闭 2 个月前。 是否定义了NULL - NULL? (char *)NULL - (ch
是否有推荐的方法(根据 .net Framework 指南)检查 null,例如: if (value == null) {//code1} else {//code2} 或 if (value !=
我正在尝试将值插入数据库,但出现这样的错误任何人都可以告诉我为什么该值为空,如下所示: An exception occurred while executing 'INSERT INTO perso
这个问题在这里已经有了答案: String concatenation with a null seems to nullify the entire string - is that desire
您好,我正在 Android 联系人搜索模块中工作。我正在查询下方运行。 cur = context.getContentResolver().query(ContactsContract.Data.
下面的 SQL 表定义说明了从我的 MYSQL 数据库创建表的语句之一,该数据库是由我公司的前开发人员开发的。 DROP TABLE IF EXISTS `classifieds`.`category
我主要有应用程序开发背景。在编程语言中 variable == null或 variable != null有效。 当涉及到 SQL 时,以下查询不会给出任何语法错误,但也不会返回正确的结果。 sel
我在尝试检查某些元素是否为 NULL 时遇到段错误或不。任何人都可以帮忙吗? void addEdge(int i, int j) { if (i >= 0 && j > 0)
在 SQL 服务器中考虑到以下事实:Col1 和 Col2 包含数值和 NULL 值 SELECT COALESCE(Col1,Col2) 返回一个错误:“COALESCE 的至少一个参数必须是一个不
在 SQL 服务器中考虑到以下事实:Col1 和 Col2 包含数值和 NULL 值 SELECT COALESCE(Col1,Col2) 返回一个错误:“COALESCE 的至少一个参数必须是一个不
下面查询的关系代数表达式是什么?我找不到“Is Null”的表达式。 SELECT reader.name FROM reader LEFT JOIN book_borrow ON reader.ca
我正在尝试使用三元运算符来检查值是否为 null 并返回一个表达式或另一个。将此合并到 LINQ 表达式时,我遇到的是 LINQ 表达式的 Transact-SQL 转换试图执行“column = n
我在给定的代码中看到了以下行: select(0, (fd_set *) NULL, (fd_set *) NULL, (fd_set *) NULL, &timeout); http://linux
var re = /null/g; re.test('null null'); //> true re.test('null null'); //> true re.test('null null')
这个问题在这里已经有了答案: 关闭 13 年前。 我今天避开了一场关于数据库中空值的激烈辩论。 我的观点是 null 是未指定值的极好指示符。团队中有意见的其他每个人都认为零和空字符串是可行的方法。
由于此错误,我无法在模拟器中运行我的应用: Error:null value in entry: streamOutputFolder=null 或 gradle - Error:null value
我正在尝试在 Android 应用程序中创建电影数据库,但它返回错误。知道这意味着什么吗? public Cursor returnData() { return db.query(TABLE
我一直在检查浏览器中的日期函数以及运行时间 new Date (null, null, null); 在开发工具控制台中,它给出了有效的日期 Chrome v 61 回归 Sun Dec 31 189
为什么 NA==NULL 会导致 logical (0) 而不是 FALSE? 为什么 NULL==NULL 会导致 logical(0) 而不是 TRUE? 最佳答案 NULL 是一个“零长度”对象
我是一名优秀的程序员,十分优秀!