Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共4 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:企业微信 GetJsSignature 报 TLS 错误

1楼
zhutangxin 发表于:2025/2/18 2:57:00
老师: 下述问题怎么解决? (已经试过申请SSL证书,启动 https 服务, 错误是一样的。)

在执行企业微信 GetJsSignature时,如果不启用 TLS 1.2/1.3, 报错如下:

获取jsapi_ticket,原因:
{
  "errcode": 48010,
  "errmsg": "you are using TLS 1.0/1.1 which is deprecated, please use TLS 1.2 or higher, hint: [1739816396123491785466345], from ip: 119.45.196.00, more info at https://open.work.weixin.qq.com/devtool/query?e=48010"
}


企业微信 GetJsSignature 的代码如下:

Static CreateTime As Date '记录最近一次生成Ticket 的时间
Static Ticket As String '记录最近一次生成的Ticket

Dim token As String = Functions.Execute("GetQyWxAccessToken") ' 2024-8-24
If token.Length > 0 Then     
    Dim tp As TimeSpan = Date.Now - CreateTime
    Dim ul As String = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token={0}"
    If tp.TotalSeconds > 3600 Then
        
' token 正确
        Dim hc As New HttpClient(CExp(ul, token))
' 可以拼出 url: CExp(ul, token)

        Dim ret As String = hc.GetData()

        CreateTime = Date.Now()
        Dim jo As JObject = JObject.Parse(ret)
        If jo("errcode") = "0" Then
            Ticket = jo("ticket")
        Else
            Output.Logs("token").Add("获取jsapi_ticket,原因:" & vbcrlf & jo.ToString)
            Output.Logs("token").Save(ProjectPath & "token.txt",True) '日志位于当前项目目录里
            Output.Logs("token").Clear
            ' 出错点
        End If
    End If
    Dim signature As String = CExp("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}", Ticket, args(0), args(1), args(2))
    Return Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(signature, "SHA1").ToLower()
End If


在服务器上,按AI的建议,用批处理文件(该文件的代码见最后)修改注册表,启动 TLS 1.2 和 1.3 但登录时会抛出如下错误:


事件/函数: 
基础连接已经关闭: 发送时发生错误。
   在 System.Net.HttpWebRequest.GetResponse()
   在 Foxtable.HttpClient.GetData(Boolean SkipErr)
由于意外的数据包格式,握手失败。
   在 System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
   在 System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   在 System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   在 System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
   在 System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
   在 System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
   在 System.Net.TlsStream.CallProcessAuthentication(Object state)
   在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   在 System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
   在 System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   在 System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   在 System.Net.ConnectStream.WriteHeaders(Boolean async)

修改注册表的批处理文件内容如下:

::65001 代表使用UTF-8编码,避免中文提示乱码
chcp 65001
@echo 正在添加TLS1.2和1.3键(项)......
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server"
@echo 正在添加TLS1.2和1.3值(DWORD)......
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v Enabled /t REG_DWORD /d 1 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client" /v Enabled /t REG_DWORD /d 1 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" /v Enabled /t REG_DWORD /d 1 /f
@echo 正在添加TLS1.0和1.1键(项)......
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server"
@echo 正在禁用1.0和1.1低版本TLS协议......
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client" /v DisabledByDefault /t REG_DWORD /d 1 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client" /v Enabled /t REG_DWORD /d 0 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v DisabledByDefault /t REG_DWORD /d 1 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 0 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client" /v DisabledByDefault /t REG_DWORD /d 1 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client" /v Enabled /t REG_DWORD /d 0 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v DisabledByDefault /t REG_DWORD /d 1 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 0 /f
@echo TLS配置已完成,请重启电脑,使TLS协议配置生效!!!
pause

[此贴子已经被作者于2025/2/18 3:19:14编辑过]
2楼
有点蓝 发表于:2025/2/18 8:38:00
GetJsSignature 第一行前面加上一行

Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12 

如果不行先恢复注册表再试试
3楼
zhutangxin 发表于:2025/2/19 10:51:00
我增加了代码如下,问题解决了。

System.Net.ServicePointManager.SecurityProtocol = DirectCast(3072 Or 192, System.Net.SecurityProtocolType) ' 192 对应 Tls(TLS 1.0); 3072 对应 Tls12(TLS 1.2)

  • .NET Framework 4.0 默认不支持 TLS 1.2/1.3

  • 可以通过直接使用数值 3072 来启用 TLS 1.2。

  • 如果需要支持 TLS 1.3,必须升级到 .NET Framework 4.8 或更高版本。

  • 建议升级到 .NET Framework 4.5 或更高版本,以获得更好的 TLS 支持和安全性。

4楼
有点蓝 发表于:2025/2/19 11:00:00
直接赋值就行

System.Net.ServicePointManager.SecurityProtocol = 3072
共4 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .04688 s, 2 queries.