我被要求使用基于证书的身份验证来保护我的无状态api端点。我阅读了有关该主题的文章,并意识到我需要创建一个中间件来检查请求,然后根据一些指纹检查x-ARR-ClientCert标头,以检查证书是否有效。到目前为止,一切都很好。
问题是我无法测试中间件,因为我不知道如何发送这样的标头。我已经有一个自签名证书(.crt)和一个密钥(.key)。我尝试过邮递员,但在VS2017上调试时看不到x-ARR-ClientCert。
有帮助吗?
编辑1
我知道它有些旧,但是最后作者显示了浏览器要求提供证书,但是我无法管理浏览器要求提供证书。
我在这里忘记提及的一件事是我的API在本地Service Fabric群集上,所以可能是问题所在
编辑2
对于Postman,我遵循了本教程:Postman Tutorial,但是没有运气:首先,我必须关闭ssl检查,然后将证书添加到Postman时,x-ARR-ClientCert标头是没有被发送。
我还尝试了curl:> curl --cert cert.crt --key client.key https://localhost/api/values --insecure
,但仍然没有发送x-ARR-ClientCert。
答案 0 :(得分:1)
我不确定您要完成什么...
在相互证书身份验证中,浏览器处理身份验证\证书交换,并且当用户尝试访问受客户端证书保护的端点时,服务器告诉客户端(浏览器)它需要证书才能接受连接,并且浏览器会弹出一条消息,提示用户使用证书,here上面写着一个很好的文字。
如果计划要实现自动化,则邮递员博客上有article关于如何为此场景设置客户端证书的信息。另一个选项是尝试使用here中所述的CURL发送证书。
第二,您正在重新发明轮子,已经有一些现成的可以使用HttpsConnectionAdapterOptions.ClientCertificateMode = RequireCertificate
在kestrel中使用的实现以及一些授权中间件here和here。
最后,确保中间没有代理,或者代理或网关没有从客户端连接中删除证书。