概述
问题实例, 证书适用于 *.quiknode.pro
,但您尝试连接的是 magical-cosmological-leaf.SOLANA_DEVNET.quiknode.pro
,这与通配符模式不匹配。
问题解析
通配符证书 (
*.quiknode.pro
):这种证书设计用于匹配单一级别的子域名。例如,*.quiknode.pro
可以匹配api.quiknode.pro
或dev.quiknode.pro
,但 不能 匹配sub.api.quiknode.pro
这种多级子域名。您的连接尝试:您正在尝试连接
magical-cosmological-leaf.SOLANA_DEVNET.quiknode.pro
,它有两个子域名级别(magical-cosmological-leaf
和SOLANA_DEVNET
),这不符合*.quiknode.pro
的匹配规则,导致 TLS 验证失败。
解决方案
验证并修正 WebSocket 端点
检查端点结构:确保您使用的 WebSocket 端点符合证书要求的单一级别子域名。
例如,将:
wss://magical-cosmological-leaf.SOLANA_DEVNET.quiknode.pro
修改为:
wss://solana-devnet.quiknode.pro
(注意:具体的子域名可能根据 QuikNode 的配置有所不同,请参考其文档或控制面板获取正确的端点。)
更新
.env
文件:修改您的.env
文件以反映正确的 WebSocket 端点。RPC_ENDPOINT_WSS=wss://solana-devnet.quiknode.pro SPL_TOKEN=您的_SPL_代币地址
联系 QuikNode 支持
如果您不确定正确的端点结构,建议联系 QuikNode 的支持团队,以确保您使用的是正确的 URL。
临时解决方法:禁用 TLS 验证
⚠️ _警告: 禁用 TLS 验证会使您的连接面临潜在的安全风险。仅在测试环境中使用此方法。_
修改 WebSocket 连接:调整您的 WebSocket 客户端以跳过 TLS 证书验证。以下是如何实现的方法:
package main import ( "context" "crypto/tls" "github.com/gagliardetto/solana-go" "github.com/joho/godotenv" "log" "os" "github.com/davecgh/go-spew/spew" "github.com/gagliardetto/solana-go/rpc" "github.com/gagliardetto/solana-go/rpc/ws" ) func main() { // 加载 .env 文件 err := godotenv.Load() if err != nil { log.Println("未找到 .env 文件,使用环境变量") } RPC_ENDPOINT_WSS := os.Getenv("RPC_ENDPOINT_WSS") if RPC_ENDPOINT_WSS == "" { log.Fatal("环境变量中未定义 RPC_ENDPOINT_WSS") } SPL_TOKEN := os.Getenv("SPL_TOKEN") if SPL_TOKEN == "" { log.Fatal("环境变量中未定义 SPL_TOKEN") } // 创建自定义 WebSocket 拨号器,配置 TLS dialer := ws.NewDialer( ws.WithTLSConfig(&tls.Config{ InsecureSkipVerify: true, // 禁用证书验证 }), ) client, err := dialer.Dial(context.Background(), RPC_ENDPOINT_WSS) if err != nil { panic(err) } defer client.Close() program := solana.MustPublicKeyFromBase58(SPL_TOKEN) // serum { // 订阅提及提供的公钥的日志事件: sub, err := client.LogsSubscribeMentions( program, rpc.CommitmentRecent, ) if err != nil { panic(err) } defer sub.Unsubscribe() for { got, err := sub.Recv() if err != nil { panic(err) } spew.Dump(got) } } }
注意:在实际生产环境中,请务必确保 TLS 验证开启,以保障数据传输的安全性。最佳的解决方案是确保您使用的 WebSocket 端点与 TLS 证书匹配。如果您无法确认正确的端点,联系 QuikNode 的支持团队将是最有效的途径。仅在确有必要且理解潜在风险的情况下,才考虑禁用 TLS 验证。
最后
以上就是名字长了才好记为你收集整理的golang解决主机名与服务器提供的 TLS 证书不匹配问题的全部内容,希望文章能够帮你解决golang解决主机名与服务器提供的 TLS 证书不匹配问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复