在 JavaScript 请求客户端证书

Request Client Certificate on JavaScript

Objective

我需要在浏览器上打开这个 JavaScript 证书模式给用户 select 他们的证书(它是 葡萄牙语 抱歉):

然后像这样保存在我的 Action 上:

[HttpGet]
public ActionResult GetClientCertificate() {
    var requestCertificate = System.Web.HttpContext.Current.Request.ClientCertificate;

    ///Transform to byte[] and save on DataBase
}

问题

我花了很多时间研究,因为这是我第一次接触这种技术,但无论我做什么,我都无法让它发挥作用。模态永远不会打开,ClientCertificate 总是空的。真的有可能在 JavaScript?

上实现这一目标

上下文

ISS 配置

<access sslFlags="SslNegotiateCert" />

<applicationDependencies>
    <application name="Active Server Pages" groupId="ASP" />
</applicationDependencies>

<authentication>

    <anonymousAuthentication enabled="true" userName="" />

    <basicAuthentication enabled="false" />

    <clientCertificateMappingAuthentication enabled="true" />

    <digestAuthentication enabled="false" />

    <iisClientCertificateMappingAuthentication enabled="true">
    </iisClientCertificateMappingAuthentication>

    <windowsAuthentication enabled="false">
        <providers>
            <add value="Negotiate" />
            <add value="NTLM" />
        </providers>
    </windowsAuthentication>

</authentication>

<authorization>
    <add accessType="Allow" users="*" />
</authorization>

JS

$(document).on("click", "#btnCertificate", function() {
    $.get("/Gerenciamento/CertificadoDigital/GetCertificate", null, function(data) {
        //// Redirect to other page
    });
});

链接

这些是我到目前为止遇到的问题(一半没有回答):

经过大量研究(并在@pedrofb 的帮助下),我发现 不可能 触发提示请求Ajax (or JavaScript) 的客户端证书,必须使 server 配置由 url,导致我改变了我的做法。

我通过要求用户上传证书的 .pptx 文件以作为 保存在我们的数据库中来解决它,以便稍后我需要转换时使用它到 X509Certificate