"The remote certificate is invalid according to the validation procedure",但仅来自同一服务器调用
"The remote certificate is invalid according to the validation procedure", but only from same server call
TLDR: 通过 https 进行的 Web 服务调用在另一台计算机上工作,但从本地服务器(本身)它给出“System.Security.Authentication.AuthenticationException,System.Net.WebException 远程证书是根据验证程序无效。
我有一个 网站(编辑:网站本身不在 https 上,仅在 http 上。它通过通过 IIS 绑定绑定到网站的 dns 名称访问.) 和一个 webservice,运行 在 server 上 hostname 和 ip地址。
(我可能不被允许透露实际姓名和地址)。
公司 CA CA 颁发了 证书,具有以下属性(以及其他属性):
Issuer: CA
Subject: CN = hostname
Subject Alternative Name: IP Address = ip-address
我删除了 IIS 中的 web 服务的 http 绑定,只留下 https。
类型
主机名
端口
IP 地址
绑定信息
https
443
ip地址
网站 使用 url:
调用 服务
https://ip地址/service.asmx
和代码:
using (WebResponse webResponse = request.GetResponse()) {
do stuff...
}
“GetResponse()”函数连续抛出多个错误:
Exception thrown: 'System.Security.Authentication.AuthenticationException' in System.dll
Exception thrown: 'System.Security.Authentication.AuthenticationException' in System.dll
Exception thrown: 'System.Security.Authentication.AuthenticationException' in System.dll
Exception thrown: 'System.Security.Authentication.AuthenticationException' in System.dll
Exception thrown: 'System.Security.Authentication.AuthenticationException' in System.dll
Exception thrown: 'System.ObjectDisposedException' in System.dll
Exception thrown: 'System.Net.WebException' in System.dll
Exception thrown: 'System.Net.WebException' in System.dll
异常信息为:
The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
内部异常:
The remote certificate is invalid according to the validation procedure.
我有 网站 - website_local 的精确副本,它调用了相同的 服务。这使它成为一个远程调用(从我的电脑到 服务器 )。 它无一例外地工作。不再有 http 绑定,所以连接不可能不安全。
如果我使用 Chrome 访问“https://ip-address/service.asmx”我的电脑和 server 它说连接是安全的并且证书有效且受信任(因为 CA 证书存在于“受信任的根")
到目前为止我做了什么:
- 在服务器上将证书放在“LocalComputer\Personal”和“LocalComputer\Trusted根证书颁发机构中“
- 将 localhost 证书放入“LocalComputer\Trusted 根证书颁发机构”(它已经存在于“个人”中)
- 确保 CA 证书 位于“LocalComputer\Trusted 根证书颁发机构”
- certificate in LocalComputer\Personal did: "All tasks -> Manage private keys -> Add -> IIS_IUSRS -> Full control and Read" . (本地主机证书已有该设置)。
- 尝试将 url 从“https://ip-address/service.asmx”切换到“https: //localhost/service.asmx”和“https://hostname/service.asmx” - 在代码中不起作用,Chrome(我的电脑和 服务器)说,现在连接不安全并且 NET::ERR_CERT_COMMON_NAME_INVALID.
所以问题是:
为什么从我的 本地网站 调用 服务 (远程调用),但在实际 网站 调用相同的 服务 (相同的服务器调用)?
更新 1: 如果我尝试使用启用了 SSL 验证的 Postman 调用相同的服务,它会显示:“无法验证第一个证书”。
为什么它在代码中有效?
我可以向公司的 CA 申请另一个证书,但我需要规范。
有人可以详细说明吗?当前 certificate 同时具有 hostname 和 ip-address 并且应该对该网站上的任何服务有效,不应该吗?
这就是我们最终做到的:
- 在企业 LAN 中注册了一个 DNS 名称;
- 为该特定名称颁发了新证书,没有将其绑定到服务器的 ip 地址;
- 在 IIS 中添加了新的 dns-name 作为主机名并添加了新的证书。
- 将连接字符串更改为 https://dns-name/service.asmx
而且有效!
我最好的猜测是@zaitsman 关于为什么它不能在服务器本身上工作,但在我的电脑上工作的原因是正确的。
Does your certificate also have 127.0.0.1 and ::1 addresses? because most likely >when you're calling self over web underlying TCP stack just loops back after DNS >resolution.
TLDR: 通过 https 进行的 Web 服务调用在另一台计算机上工作,但从本地服务器(本身)它给出“System.Security.Authentication.AuthenticationException,System.Net.WebException 远程证书是根据验证程序无效。
我有一个 网站(编辑:网站本身不在 https 上,仅在 http 上。它通过通过 IIS 绑定绑定到网站的 dns 名称访问.) 和一个 webservice,运行 在 server 上 hostname 和 ip地址。
(我可能不被允许透露实际姓名和地址)。
公司 CA CA 颁发了 证书,具有以下属性(以及其他属性):
Issuer: CA
Subject: CN = hostname
Subject Alternative Name: IP Address = ip-address
我删除了 IIS 中的 web 服务的 http 绑定,只留下 https。
类型 | 主机名 | 端口 | IP 地址 | 绑定信息 |
---|---|---|---|---|
https | 443 | ip地址 |
网站 使用 url:
调用 服务
https://ip地址/service.asmx
和代码:
using (WebResponse webResponse = request.GetResponse()) {
do stuff...
}
“GetResponse()”函数连续抛出多个错误:
Exception thrown: 'System.Security.Authentication.AuthenticationException' in System.dll
Exception thrown: 'System.Security.Authentication.AuthenticationException' in System.dll
Exception thrown: 'System.Security.Authentication.AuthenticationException' in System.dll
Exception thrown: 'System.Security.Authentication.AuthenticationException' in System.dll
Exception thrown: 'System.Security.Authentication.AuthenticationException' in System.dll
Exception thrown: 'System.ObjectDisposedException' in System.dll
Exception thrown: 'System.Net.WebException' in System.dll
Exception thrown: 'System.Net.WebException' in System.dll
异常信息为:
The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
内部异常:
The remote certificate is invalid according to the validation procedure.
我有 网站 - website_local 的精确副本,它调用了相同的 服务。这使它成为一个远程调用(从我的电脑到 服务器 )。 它无一例外地工作。不再有 http 绑定,所以连接不可能不安全。
如果我使用 Chrome 访问“https://ip-address/service.asmx”我的电脑和 server 它说连接是安全的并且证书有效且受信任(因为 CA 证书存在于“受信任的根")
到目前为止我做了什么:
- 在服务器上将证书放在“LocalComputer\Personal”和“LocalComputer\Trusted根证书颁发机构中“
- 将 localhost 证书放入“LocalComputer\Trusted 根证书颁发机构”(它已经存在于“个人”中)
- 确保 CA 证书 位于“LocalComputer\Trusted 根证书颁发机构”
- certificate in LocalComputer\Personal did: "All tasks -> Manage private keys -> Add -> IIS_IUSRS -> Full control and Read" . (本地主机证书已有该设置)。
- 尝试将 url 从“https://ip-address/service.asmx”切换到“https: //localhost/service.asmx”和“https://hostname/service.asmx” - 在代码中不起作用,Chrome(我的电脑和 服务器)说,现在连接不安全并且 NET::ERR_CERT_COMMON_NAME_INVALID.
所以问题是: 为什么从我的 本地网站 调用 服务 (远程调用),但在实际 网站 调用相同的 服务 (相同的服务器调用)?
更新 1: 如果我尝试使用启用了 SSL 验证的 Postman 调用相同的服务,它会显示:“无法验证第一个证书”。
为什么它在代码中有效?
我可以向公司的 CA 申请另一个证书,但我需要规范。
有人可以详细说明吗?当前 certificate 同时具有 hostname 和 ip-address 并且应该对该网站上的任何服务有效,不应该吗?
这就是我们最终做到的:
- 在企业 LAN 中注册了一个 DNS 名称;
- 为该特定名称颁发了新证书,没有将其绑定到服务器的 ip 地址;
- 在 IIS 中添加了新的 dns-name 作为主机名并添加了新的证书。
- 将连接字符串更改为 https://dns-name/service.asmx
而且有效!
我最好的猜测是@zaitsman 关于为什么它不能在服务器本身上工作,但在我的电脑上工作的原因是正确的。
Does your certificate also have 127.0.0.1 and ::1 addresses? because most likely >when you're calling self over web underlying TCP stack just loops back after DNS >resolution.