[英]SSL problem while sending Firebase Message
我正在尝试使用 .Net SDK 通过 Google Firebase 向应用程序发送通知。我可以在我的计算机上成功发送消息,但在我的 Windows 2016 服务器上失败。 根据错误消息,这似乎是 SSL/TLS 通信问题。
当我在服务器上启用所有协议和密码套件时,应用程序运行没有问题。 但是当我禁用 TLS 1.0 协议时,调用 SendAsync function 时会导致“客户端和服务器无法通信,因为它们不具备通用算法”错误。如果我再次启用 TLS 1.0 但使用 CBC 禁用一些弱密码套件,它导致“请求被中止:无法创建 SSL/TLS 安全通道”。 错误。
[WebException: The request was aborted: Could not create SSL/TLS secure channel.]
System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context) +337
System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar) +145
[HttpRequestException: An error occurred while sending the request.]
Google.Apis.Http.<SendAsync>d__69.MoveNext() +4670
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +32
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +62
Google.Apis.Auth.OAuth2.Requests.<ExecuteAsync>d__1.MoveNext() +402
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +32
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +62
Google.Apis.Auth.OAuth2.<RequestAccessTokenAsync>d__38.MoveNext() +492
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +32
Google.Apis.Auth.OAuth2.<RefreshTokenAsync>d__12.MoveNext() +766
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +32
Google.Apis.Auth.OAuth2.TokenRefreshManager.ResultWithUnwrappedExceptions(Task`1 task) +138
System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke() +104
System.Threading.Tasks.Task.Execute() +71
...
这真的很奇怪。 C# SDK 是否仅支持 TLS 1.0 和旧密码套件? 还是.Net 框架问题?
这是我的代码,在 vb.net
Async Function sendMessage(ByVal Message As Messaging.Message) As Threading.Tasks.Task(Of String)
Dim app As FirebaseApp
Try
app = FirebaseApp.Create(New AppOptions With { _
.ProjectId = "xxx", _
.Credential = GoogleCredential.FromFile(Server.MapPath("xxx-yyyy.json")) _
}, "lab6")
Catch ex As Exception
app = FirebaseApp.GetInstance("lab6")
End Try
Dim result As String = ""
Dim firebaseMessagingInstance As FirebaseMessaging = FirebaseMessaging.GetMessaging(app)
result = Await firebaseMessagingInstance.SendAsync(Message)
Return result
End Function
当它调用 SendAsync 方法时发生异常。
.Net框架版本:4.6.1
FirebaseAdmin SDK 版本:2.2.0
关于为什么会发生这种情况的任何想法? 有没有办法强制使用 TLS 1.2 协议?
加里
我终于知道为什么了。 Windows Server 2016 原生支持 TLS 1.2,但 .Net framework 4.6.1 并未将其用作默认协议。 我们必须设置一个注册表来告诉.Net 使用强密码。
使用 regedit.exe 添加或设置注册表项:
HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319
HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319
Name: SchUseStrongCrypto
Type: DWORD
Value: 1
通过添加此条目解决我的问题。
加里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.