标签: mutual-authentication

从HTTP请求访问客户端证书

我正在尝试从HTTP请求访问我的Web API中的客户端证书.我附上证书如下:

X509Certificate2 clientCert = GetClientCertificate();   
HttpWebRequest request  = (HttpWebRequest)WebRequest.Create("https://localhost:44366/test");                        
request.KeepAlive = true;
request.Method = "GET";
request.Accept = "application/json";
request.ClientCertificates.Clear();
request.ClientCertificates.Add(clientCert);
var response = (HttpWebResponse) request.GetResponse();  
Run Code Online (Sandbox Code Playgroud)

在哪里GetClientCertificate()访问本地安装的证书.从我的WebApi内部,我有以下路线:

[HttpGet]
[Route("test")]
public HttpResponseMessage TestNoAuth()
{
    X509Certificate2 cert = Request.GetClientCertificate();
    return cert == null ? Request.CreateResponse(HttpStatusCode.BadRequest, "No cert") : Request.CreateResponse(HttpStatusCode.OK, "Cert attached");
}                                                              
Run Code Online (Sandbox Code Playgroud)

无论我尝试什么,cert总会回来null.我是否错误地附加了证书,或者尝试错误地访问它?我已经用这条测试路线创建了一个全新的WebAPI,以确保我们的开发API中没有可能存在冲突的设置.任何帮助将不胜感激.

c# asp.net security x509 mutual-authentication

9
推荐指数
1
解决办法
1800
查看次数

具有相互身份验证的 cUrl

我正在尝试对第三方服务器执行 cUrl。他们为我提供了一个 p12 文件,我将其安装在浏览器中。使用浏览器时,我收到服务器的响应。从 Linux 终端执行 cUrl 时,出现握手错误。

我将 .p12 提取到密钥和证书,然后运行以下命令:

curl --key client.key --cert client.crt -X GET -v https://x.x.x.x:xxxx/folder/endpoint

并得到如下回复:

Note: Unnecessary use of -X or --request, GET is already inferred.
*   Trying x.x.x.x...
* TCP_NODELAY set
* Connected to x.x.x.x (x.x.x.x) port xxxx (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello …
Run Code Online (Sandbox Code Playgroud)

curl ssl-certificate mutual-authentication

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

是否有任何公共 Web 服务可以检查 MTLS 证书并使用 application/json 进行响应

另一个线程指出了一些需要客户端 MTLS 证书、接受任何证书、然后使用有关 SSL 握手/证书的信息进行响应的服务。

检查客户端证书的 HTTPS 测试服务器

这些端点都返回 HTML。有谁知道类似的返回 application/json 的东西吗?

ssl web-services mutual-authentication

9
推荐指数
1
解决办法
4152
查看次数

如何为iOS实现客户端证书和服务器身份验证

我最近经历了一个非常艰巨的过程来构建一些应该非常简单但在任何一个地方看起来基本上都找不到的东西.我想尝试把所有内容都放在这里询问我是否做错了,如果没有,请帮助那些需要这些信息的人.

背景:我试图提供安全性的产品/服务是围绕Windows服务器上的WCF服务构建的,只能通过PC或iPad上的自定义客户端应用程序访问.每个客户一台服务器,无浏览器访问权限 使用Windows标准机制和来自商业CA的证书,所有内容都已通过身份验证和授权进行TLS保护.

为了进一步限制访问,使用自签名证书为Windows平台实现了客户端/服务器证书(在没有公共/浏览器访问的相互身份验证的情况下不需要商业CA--尽管声称相反 - 并且它们更难管理).

让所有这些对iPad起作用是一个非常有记录的噩梦,有大量的虚假信息或部分正确的建议.在接下来的内容中,我尝试链接到最佳来源,但如果我无意中错过了归因,我会道歉.如果这篇文章有任何错误/误导,请发表评论.

谢谢

client certificate keychain ios mutual-authentication

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

使用证书颁发机构签署证书请求

我想使用TLS相互身份验证来验证在go中制作的API上的客户端.我已经创建了一个证书颁发机构,让我们说Bob有一个他希望与客户端一起使用的密钥对.Bob创建了一个证书请求,并希望我验证他的证书,以便在API上进行授权和身份验证.

我用它来创建我的证书颁发机构:

openssl genrsa -aes256 -out ca.key 4096
openssl req -new -x509 -sha256 -days 730 -key ca.key -out ca.crt
Run Code Online (Sandbox Code Playgroud)

Bob用它来创建他的证书和证书请求:

openssl genrsa -out bob.key 4096
openssl req -new -key bob.key -out bob.csr
Run Code Online (Sandbox Code Playgroud)

我想得到这个,但是在去:

openssl x509 -req -days 365 -sha256 -in bob.csr -CA ca.crt -CAkey ca.key -set_serial 3 -out bob.crt
Run Code Online (Sandbox Code Playgroud)

现在,使用theses命令,Bob可以创建一个到我的API的TLS连接,使用这个tls.Config:

func createTLSConfig(certFile string, keyFile string, clientCAFilepath string) (config *tls.Config, err error) {
    cer, err := tls.LoadX509KeyPair(certFile, keyFile)
    if err != nil {
        return nil, err
    }

    clientCAFile, err := ioutil.ReadFile(clientCAFilepath) …
Run Code Online (Sandbox Code Playgroud)

pki go x509certificate mutual-authentication tls1.2

7
推荐指数
2
解决办法
5514
查看次数

通过Asp.net MVC申请客户证书

我正在尝试从客户端浏览器检索客户端证书以验证用户身份.我知道我可以创建一个与控制器同名的文件夹,并使用IIS将其SSL设置设置为需要客户端证书.事实上,我已经尝试了这个并且它有效,但是我不能采用这种方法,因为控制器内部还有其他操作,不需要向用户询问客户端证书.另外我需要在不同的控制器中询问客户端证书.

那么,您是否知道提示用户选择客户端证书的干净(如果可能)方式?

asp.net-mvc ssl client-certificates mutual-authentication

6
推荐指数
1
解决办法
1528
查看次数

Android客户端上的SSL相互身份验证FAIL接受服务器证书,但服务器未获得客户端证书

我正在尝试在Linux服务器和Android APP之间建立一个相互认证的SSL.到目前为止,我已经能够让应用程序使用服务器证书通过SSL进行通信,但是一旦我将服务器设置为仅接受客户端证书就停止工作.服务器配置似乎没问题,但我有点卡住了.我最好的猜测是客户端证书没有正确呈现给服务器,但不知道如何测试它.我尝试在我的OS X钥匙串中使用.pem作为客户端,但浏览器似乎不能使用该证书.然后,服务器证书再次完美,因为我可以实现https连接,APP接受我的未签名服务器证书.

我正在使用的代码是各种教程的组合,答案这是我收藏的主要内容:

这是我用于连接的两个主要类:1)此类处理JSON解析并执行请求

package edu.hci.additional;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

import android.content.Context;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    // function get json from url
    // …
Run Code Online (Sandbox Code Playgroud)

java ssl https android mutual-authentication

6
推荐指数
1
解决办法
2065
查看次数

如何在RESTful Web服务中使用DER编码的证书和相互身份验证?

目前我正在开发一个使用相互身份验证的应用程序,以便与REST接口进行通信.因为我对这个主题很陌生,所以我研究了几个例子 - 现在我有一些问题.我希望我能够将所有知识片段放在一起,以便更好地了解整个过程.

该过程应如下所示:

  1. 我获得了导出的服务器证书,其中包含服务器的公钥,并将其添加到应用程序包(稍后用于SSL固定).
  2. 代表2路认证开始的第一个Request是一个Post Request,它还包含一个证书签名请求,用于获取客户端证书(需要与REST接口的安全部分通信).CSR通过openSSL lib在代码中动态生成.
  3. 服务器的响应返回用于客户端身份验证的签名证书.此证书采用DER格式和Base64编码.

我用于为第一个请求执行SSL固定的代码如下所示,SSL Pinning按预期工作.

- (void)connection:(NSURLConnection *)connection
willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"server-cert" ofType:@"cer"];
    SecTrustRef serverTrust = challenge.protectionSpace.serverTrust;
    SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, 0);

    NSData *remoteCertificateData =   CFBridgingRelease(SecCertificateCopyData(certificate));
    NSData *localCertificateData = [NSData dataWithContentsOfFile:cerPath];


    if ([remoteCertificateData isEqualToData:localCertificateData]) {

        NSURLCredential *credential = [NSURLCredential credentialForTrust:serverTrust];
        [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];

        [[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:[challenge protectionSpace]];

        NSLog(@"Certificate Pinning Succeeded");

    } else {

        [[challenge sender] cancelAuthenticationChallenge:challenge];

        NSLog(@"Certificate Pinning Failed");

    }
}
Run Code Online (Sandbox Code Playgroud)

但是如何处理来自服务器的返回证书?据我所知,我必须使用以下NSURLConnection委托方法 - 并以某种方式向服务器提供此证书(用于进一步的请求).

- (BOOL)connection:(NSURLConnection *)connection …
Run Code Online (Sandbox Code Playgroud)

https openssl ssl-certificate ios mutual-authentication

6
推荐指数
0
解决办法
617
查看次数

存储客户端证书的最佳实践?

我正在构建一个需要相互身份验证的应用程序。因此,我将允许我的用户上传一堆客户端证书,当他们拨打电话时,他们可以使用其中任何一个。我将匹配传入请求中的客户端证书,以查看它是否与已存储的任何证书匹配,如果匹配,则该请求将得到满足。

现在我正在尝试找出存储这些客户端证书的最佳方法。我在想我可以将它们存储在数据库中,或者某种文件/blob 存储中,或者我了解到它们也可以安装在机器的存储中?

这些选项中哪一个是理想的或被认为是最佳实践?

存储客户端证书的最佳实践是什么?

编辑:我的服务器实际上在带有 IIS 的 Windows 计算机上运行一项服务,其他用户将使用该服务。

security ssl certificate x509certificate mutual-authentication

6
推荐指数
1
解决办法
6667
查看次数

如何在C#中进行相互身份验证?

我需要知道如何在c#中进行相互认证.我知道在WCF应用程序中它非常简单.但是,我必须从C#中的控制台应用程序进行双向SSL身份验证.我有两个客户端和服务器的公共证书.

任何帮助,将不胜感激!

c# mutual-authentication

6
推荐指数
1
解决办法
618
查看次数