如何将客户端 pkcs12 证书添加到 Postman Chrome、W7?

Posted

技术标签:

【中文标题】如何将客户端 pkcs12 证书添加到 Postman Chrome、W7?【英文标题】:How to add a client side pkcs12 certificate to Postman Chrome, W7 ? 【发布时间】:2015-02-14 14:21:25 【问题描述】:

我尝试测试一个“奇怪”的 GET 请求,我必须提供一个 BASIC 身份验证和一个客户端证书。

我尝试使用 Postman Chrome 进行检查,但我不明白如何将证书从 chrome 个人证书链接到我的请求。

我看到了这个讨论:https://github.com/a85/POSTMan-Chrome-Extension/issues/482,但它是关于 MAC 密钥库的,我不能转换为 W7/Chrome。

这是我的 java 代码设置,它应该与邮递员完成相同的工作,以帮助您了解我希望邮递员做什么。我们用那篇文章来写它

        InputStream is = context.getResources().getAssets().open("CertificateFile.p12");
        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        BufferedInputStream bis = new BufferedInputStream(is);
        String password ="xxxxx";
        keyStore.load(bis, password.toCharArray()); // password is the PKCS#12 password. If there is no password, just pass null
        // Init SSL Context
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
        kmf.init(keyStore, password.toCharArray());
        KeyManager[] keyManagers = kmf.getKeyManagers();
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(keyManagers, null, null);
        HttpsURLConnection urlConnection = null; 
        String strURL = "theUrlITryToHit";
        url = new URL(strURL);
        urlConnection = (HttpsURLConnection) url.openConnection();
        if(urlConnection instanceof HttpsURLConnection) 
            ((HttpsURLConnection)urlConnection)
            .setSSLSocketFactory(sslContext.getSocketFactory());
        
        urlConnection.setRequestMethod("GET");
        String basicAuth = "Basic " + Base64.encodeToString("pseudo:password".getBytes(), Base64.NO_WRAP);
        urlConnection.setRequestProperty ("Authorization", basicAuth);

【问题讨论】:

您找到解决方案了吗?我想给邮递员添加证书进行测试,你能帮我吗 【参考方案1】:

我使用的是 Mac,但对您来说可能类似。 如果您可以在 PC 上使用 CURL,请先查看是否可以使其与 CURL 一起使用:

curl --insecure --cert-type P12 --cert /path-to/your-file.p12:the-password https://your-host.com/endpoint

邮递员设置:

Postman->preferences->General
SSL certificate verification OFF

邮递员证书:

Postman->preferences->Certificates
Client Certificates:


Host yourhost.com
CRT file
Key file
PFX file  /path-to-file/CertificateFile.p12  
Passphrase your-file-password

【讨论】:

在 MAC 上它应该可以工作,但只是因为 Mac 的 curl 支持 p12 ...在其他平台上你必须使用 .pem - 我认为这是由于特定的构建和使用的安全库(网景与其他人) 在 Ubuntu 上工作。 为什么要关闭邮递员设置 SSL 证书验证?我猜这个关闭后,邮递员甚至不会尝试将客户端证书发送到服务器。因此它无法正常工作。【参考方案2】:

我遇到了类似的问题,刚刚解决了。我的私钥和证书存储在一个 .pem 文件中,所以我首先需要将它们放入 Windows 将使用的格式。我使用以下命令做到了这一点:

openssl pkcs12 -inkey mycertandkey.pem -in mycert.crt -export -out mycertandkey.pfx

我是在 linux 中完成的,但如果你安装了 openssl,它也应该在 Windows 中工作。

在 Windows 中运行 certmgr.msc。右键单击“个人”文件夹并选择“所有任务”->“导入...”并选择 .pfx 文件。输入密码并将其导入“个人”文件夹。

完成后,您需要关闭正在运行的 Chrome 窗口。然后在新窗口中打开 Postman。当您尝试连接到 URL 时,这一次它应该要求确认使用客户端证书。确认后,您应该可以从那时起调用该 URL。

【讨论】:

我会试试的(即使我不再需要它了)。谢谢 我遇到了一个问题,我想调用需要客户端证书的服务。邮递员正确提示我选择要发送的客户端证书,但我没有将它导入我的个人文件夹。导入它后,我无法让 Postman 重新提示我输入证书。我不仅要关闭 Chrome 和邮递员,还要杀死所有仍在运行的 Chrome.exe 进程。然后,当我再次打开 Postman 并调用该服务时,它提示我并且我能够选择正确的证书。

以上是关于如何将客户端 pkcs12 证书添加到 Postman Chrome、W7?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 keytool 在 PKCS12 密钥库中创建证书?

如何使用 keytool 列出存储在 PKCS12 密钥库中的证书?

JMeter加载客户端证书

PKCS12 证书的生成及验证

使用 openssl 将多个证书加载到 PKCS12

如何使用keytool列出存储在PKCS12密钥库中的证书?