AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 987836
Accepted
thexbuttonisntworking
thexbuttonisntworking
Asked: 2019-10-14 14:00:10 +0800 CST2019-10-14 14:00:10 +0800 CST 2019-10-14 14:00:10 +0800 CST

连接到启用了 2 路 SSL 的 Web 服务器不会在任何浏览器中提示输入证书并返回 403.7 错误

  • 772

我一直在尝试在 IIS 10 中建立一个具有 2 路 SSL 的网站。它并不是那么好。

我已经通过 NameCheap 获得了一个域,并通过 CloudFlare 获得了 DNS(仅限 DNS,无代理)。

服务器具有该域的证书,我通过 Certify with Let's Encrypt 获得了该证书。

在该服务器上,我设置了 AD CS 并使用它来创建证书颁发机构。

CA Web Enrollment 处于活动状态,仅接受来自通过 RRAS 设置的 VPN 连接的请求(我不希望它向 Internet 开放,顺便说一句,VPN 连接使用我之前获得的证书,因此可以正常工作)。

客户端 PC 启动证书并使用 CA Web Enrollment 通过 VPN 将其发送到服务器。然后发出该请求,然后将生成的证书和 CA 分别导入 CurrentUser\My、LocalMachine\TrustedRoot 存储。我还检查了客户端证书是否有私钥。

到目前为止,证书的情况是:

-服务器:CA(LocalMachine\TrustedRoot(无密钥)和LocalMachine\My(密钥)),服务器证书(LocalMachine\My(密钥))。

-客户端:CA(LocalMachine\TrustedRoot(无密钥)),客户端证书(CurrentUser\My(密钥))。

然后是 IIS 配置:服务器上有三个站点。第一个是 certsrv 应用程序的默认应用程序,它只侦听 VPN ip 和 localhost,并且只有带有服务器证书的 HTTPS 处于活动状态(端口均为 443)。第二个是一个 FTP 站点,它只监听 VPN IP 和端口 21。这些无关紧要,我之所以提到它们只是因为我不想遗漏任何东西。

第三个是我们关心的。它侦听域名、任何 ip,并同时激活 HTTP 和 HTTPS(分别使用端口 80 和 443)。HTTP 仅处于活动状态,因此 URL Rewrite 可以将其重定向到 HTTPS,并且 HTTPS 使用服务器证书。

此站点已启用 SSL 要求并根据需要启用客户端证书。

在身份验证中,所有方法都被禁用。

在 system.webServer/security/authentication/iisClientCertificateMappingAuthentication 中,我将 Enabled 设置为 true,并且将 manyToOneCertificateMappingsEnabled 设置为 true。在 manyToOneMappings 中,我有一项映射到服务器上的用户,而在规则中,我有一项带有 certificateField=Issuer、certificateSubField=CN 和 matchCriteria="我创建的 CA 的名称"。

在 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL 中创建了一个名为 SendTrustedIssuerList 且值为 1 的注册表项。

服务器证书已被删除并重新添加到域中使用 clientcertnegotiation=enabled 在 powershell 中使用 netsh 绑定到站点上的域:443。

最后,我使用https://www.nartac.com/Products/IISCrypto/中的 IISCrypto 在 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols 中设置协议。

这就是我到目前为止所做的一切,它应该涵盖整个互联网上对类似问题的所有响应,但它所做的只是给我一个 403.7 错误。我在连接尝试期间使用wireshark检查TLS流量,服务器似乎确实发送了带有受信任CA列表的请求证书(我的CA包含在列表中),但我无法让任何浏览器提示我输入客户端证书. 哦忘了提到我确实通过浏览器添加了 CA 和客户端证书,并且 IE 11 有 de 不要提示当您只有一个证书选项被禁用时,但仍然没有。

有任何想法吗?

ssl-certificate
  • 1 1 个回答
  • 393 Views

1 个回答

  • Voted
  1. Best Answer
    thexbuttonisntworking
    2019-10-16T12:52:42+08:002019-10-16T12:52:42+08:00

    最后让它工作。IIS 设置正确,问题出在证书上,不知道为什么,但浏览器不喜欢它们。因此,我从服务器中删除了 AD CS,并使用 powershell 重新制作了 CA 和客户端证书。这个新证书运行良好,所有浏览器都会在将它们放在必须去的地方后提示我使用它们。

    顺便说一句,powershell 命令如下:

    $params = @{
       DnsName = "CA Name"
       KeyLength = 2048
       KeyAlgorithm = 'RSA'
       HashAlgorithm = 'SHA256'
       KeyExportPolicy = 'Exportable'
       NotAfter = (Get-Date).AddYears(5)
       CertStoreLocation = 'Cert:\LocalMachine\My'
       KeyUsage = 'CertSign','CRLSign'
    }
    
    $rootCA = New-SelfSignedCertificate @params
    
    Export-Certificate -Cert $rootCA -FilePath "C:\path\to\file\ca-public.crt"
    
    Import-Certificate -CertStoreLocation 'Cert:\LocalMachine\Root' -FilePath "C:\path\to\file\ca-public.crt"
    
    $params = @{
       Subject = "Client Name"
       Signer = $rootCA
       KeyLength = 2048
       KeyAlgorithm = 'RSA'
       HashAlgorithm = 'SHA256'
       KeyExportPolicy = 'Exportable'
       NotAfter = (Get-date).AddYears(5)
       CertStoreLocation = 'Cert:\LocalMachine\My'
    }
    
    $clientCert = New-SelfSignedCertificate @params
    
    Export-PfxCertificate -Cert $clientCert -FilePath "C:\path\to\file\client-private.pfx" -Password (ConvertTo-SecureString -AsPlainText 'password' -Force)
    

    然后,您只需将证书导入客户端计算机上的适当存储。

    不知道使用 AD CS 创建的证书中缺少什么,但我很高兴有一个可行的解决方案。

    • 0

相关问题

  • RHEL/Apache ssl.conf 配置问题

  • IIS7 中的证书信任列表

  • SSL证书的区别?

  • 如何修复邮件服务器 SSL?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve