真的以为我修好了这个问题,但之前只是伪装了.
我使用HTTPS在IIS 7中托管了WCF服务.当我在Internet Explorer中浏览到此站点时,它就像一个魅力,这是因为我已将证书添加到本地根证书颁发机构商店.
我正在一台机器上开发,所以客户端和服务器是同一台机器.该证书直接从IIS 7管理管理单元自签名.
我现在不断得到这个错误......
无法为具有权限的SSL/TLS安全通道建立信任关系.
...从客户端控制台调用时.
我手动给自己的权限和网络服务证书,使用findprivatekey和使用cacls.exe.
我试图使用SOAPUI连接到服务,这是有效的,所以它必须是我的客户端应用程序中的一个问题,这是基于过去使用http的代码.
在哪里可以看到我似乎已经耗尽了为什么我无法连接的所有可能性?
我正在编写一个程序,用于从用户提供的URL中读取内容.我的问题在于代码是这样的:
Uri uri = new Uri(url);
WebRequest webRequest = WebRequest.Create(uri);
WebResponse webResponse = webRequest.GetResponse();
ReadFrom(webResponse.GetResponseStream());
Run Code Online (Sandbox Code Playgroud)
如果提供的URL是"https://"URL,则会中断.任何人都可以帮助我更改此代码,以便它可以使用SSL加密的内容.谢谢.
运行以下代码,我得到一个例外:
using (var client = new Pop3Client())
{
client.Connect(provider.ServerWithoutPort, provider.Port, true);
}
Run Code Online (Sandbox Code Playgroud)
我得到的例外情况:
The remote certificate is invalid according to the validation procedure.
at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过SSL发出请求.证书已安装在计算机上,可通过浏览器运行.
我正在使用此请求:
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] data = encoding.GetBytes(request.Content.OuterXml.ToString());
string password = "XXXX";
X509Certificate2 cert = new X509Certificate2("c:\\zzzz.p12", password);
string key = cert.GetPublicKeyString();
string certData = Encoding.ASCII.GetString(cert.Export(X509ContentType.Cert));
Uri uri = new Uri(request.Url);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(uri);
myRequest.Credentials = new NetworkCredential(request.User, request.Password.ToString());
myRequest.Method = "PUT";
myRequest.ContentType = request.ContentType;
myRequest.ContentLength = data.Length;
myRequest.ClientCertificates.Add(cert);
Stream newStream = myRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();
System.IO.StreamReader st = new StreamReader(((HttpWebResponse)myRequest.GetResponse()).GetResponseStream());
Run Code Online (Sandbox Code Playgroud)
使用此代码我收到此错误:
底层连接已关闭:无法为SSL/TLS安全通道建立信任关系.---> System.Security.Authentication.AuthenticationException:根据验证程序,远程证书无效.
问题是什么?
我有一个ac#app,它调用一个使用证书进行身份验证的Web服务方法.代码有效,因为当它安装在服务器A(没有代理)时,它会进行身份验证.
当我在服务器B上安装代码时,在客户端站点上,它安装在代理服务器后面.我真的尝试了几乎所有的东西,但我一直收到这个错误:
无法创建SSL/TLS安全通道
您是否认为此问题可能是由代理服务器引起的?如果您有任何亲身经历,请分享.
谢谢
在 Visual Studio 中进行本地开发和身份验证时,我始终收到以下错误:
AuthenticationException:由于证书链中的错误,远程证书无效:NotValidTime、UntrustedRoot
其中,当使用从我们的项目之一HttpClient调用我们的后端端点之一( )时会发生这种情况,因此这一切都发生在本地。localhost
该证书从去年的这个日期开始签署/有效,一年后现已失效。我团队中的其他开发人员都没有收到它或遇到相同的问题。
然后我尝试了很多东西,其中包括:
dotnet dev-certs https --clean、dotnet dev-certs https和dotnet dev-certs https --trust,它成功更新/重新创建了 2023 年到期的证书 - 但仍然不起作用/仍然收到相同的错误。我们没有集中的身份验证程序 - 它分布在系统的各个地方和场景中,因此我无法使用像if #DEBUG... //then ignore certificates. 我需要正确生成有效的证书。
尝试为我们的Intranet的Web服务站点设置自签名证书.证书本身显示它是"ok"但是当尝试从Web服务调用方法时它会抛出错误,并且在添加Web引用时它会发出警告.
以下是步骤和一些屏幕截图,以确保我提供准确的信息.
Windows server 2003. IIS.该网站是"WebServices.companyName.vmc"

这是该站点的主机头

从服务器,它显示证书'确定'.

以下是一些网站设置

现在,在visual studio 2008中,添加Web引用

单击弹出的"是"

单击"否"到此弹出窗口,按顺序多次.

代码行运行后,调用Web服务...我收到此错误
底层连接已关闭:无法为SSL/TLS安全通道建立信任关系.
当浏览器中的webservice站点,URL栏的小垫锁定时,会提供以下消息:

这是我现有的代码:
Dim mySvc As New WebServices.InstantAccount
mySvc.calledFunction()
Run Code Online (Sandbox Code Playgroud)
编辑
对于有类似问题的人,请阅读iamkrillin的回答和我的答案......因为它们是解决问题的两种不同方式......取决于您可以控制的部分(代码或证书).
我有一个已经在生产环境中运行了大约 4 年的 asp.net mvc web 应用程序。突然从大约一周前开始,我收到了对 3rd 方安全 API 的所有调用都返回此错误的消息:
System.Net.WebException:底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。---> System.Security.Authentication.AuthenticationException: 根据验证程序,远程证书无效。
这是用于调用 SendGrid 以发送电子邮件、调用 Azure Blob 存储以上传文档、调用 Connect.io 以进行日志记录。
通过将连接字符串更改为使用 http 而不是 https,我设法暂时解决了 Azure Blob 存储问题。
很明显,我的应用服务器出现了问题,我不知道从哪里开始寻找。
请帮忙。
编辑:原来我使用的是由我的(较少使用的)第 3 方 API 之一提供的示例库,并且该库有一个覆盖,
System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors)
它有自己的关于什么构成有效证书的逻辑!!!啊!
我如何在 web.config 文件中设置它
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) =>true;
Run Code Online (Sandbox Code Playgroud) 我每 5 分钟调用一次 svc 端点。问题是有时我会收到此错误:
“无法为具有授权的 SSL/TLS 建立安全通道”
其他时候它只是成功运行而没有任何问题。由于这是如此随机和间歇性的,我无法找到根本原因。
有谁知道这一定是什么原因造成的?
我有一个在 Azure 应用服务上运行的应用程序。到目前为止,我一直在使用 Gmail SMTP 服务器发送电子邮件,并且运行良好。电子邮件服务与文档中的类似,配置如下所示:
"ApplicationEmail": {
"EmailAddress": "template@gmail.com",
"Password": "temppassword",
"SmtpClient": "smtp.google.com",
"Port": "587",
"SSL": "true"
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试切换到 ProtonMail 服务器,我在那里有一个带有自定义域的帐户,最终,我尝试重新配置设置,如下所示:
"ApplicationEmail": {
"EmailAddress": "administration@mydomain.de",
"Password": "randompassword",
"SmtpClient": "smtp.protonmail.com",
"Port": "587",
"SSL": "true"
}
Run Code Online (Sandbox Code Playgroud)
这当然不起作用,我在尝试发送电子邮件时收到此错误
System.Net.Mail.SmtpException: Failure sending mail.
System.Net.Sockets.SocketException (11001): No such host is known.
Run Code Online (Sandbox Code Playgroud)
我到处寻找解决方案,我发现的唯一方法是安装在后台本地运行并加密和解密电子邮件的 ProtonBridge,但这看起来不像一个选项,因为我无法将其集成到 Azure 应用服务中,因为就像 PaaS 而不是 Azure VM。如果我错了,请不要严格判断,我对 C#、Azure 还比较陌生:)
设置是我在相同的HTTPS网站上使用相同的应用程序池和证书托管2个类似的WCF应用程序.
现在,第一个WCF应用程序在某个函数上调用第二个WCF.在第一个调用第二个WCF之后,抛出异常
"Could not establish trust relationship for the SSL/TLS secure channel..."
Run Code Online (Sandbox Code Playgroud)
我见过类似的问题,但不同之处在于我的工作应该有效,因为它使用相同的证书.可能会发生什么?
编辑:
基本上这里是如何在第一个WCF中的方法内调用第二个WCF,
public void SomeMethod(string parameter)
{
SecondServiceClient svc2 = new SecondServiceClient ("BasicHttpBinding_IService2");
svc2.DoWork(parameter);
}
Run Code Online (Sandbox Code Playgroud)
第一个WCF的第二个WCF的web.config端点有这样的:
...
<client>
<endpoint address="https://192.168.1.100/MyService2/Service2.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService2"
contract="SecondService.IService" name="BasicHttpBinding_IService" />
</client>
...
Run Code Online (Sandbox Code Playgroud)
我说,HTTPS很难玩.
c# ×8
ssl ×4
certificate ×3
wcf ×3
web-services ×3
.net ×2
iis ×2
asp.net-core ×1
asp.net-mvc ×1
azure ×1
email ×1
https ×1
pop3 ×1
put ×1
security ×1
smtp ×1
webrequest ×1