我是靠谱客的博主 名字长了才好记,最近开发中收集的这篇文章主要介绍golang解决主机名与服务器提供的 TLS 证书不匹配问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题实例, 证书适用于 *.quiknode.pro,但您尝试连接的是 magical-cosmological-leaf.SOLANA_DEVNET.quiknode.pro,这与通配符模式不匹配。

问题解析

  • 通配符证书 (*.quiknode.pro):这种证书设计用于匹配单一级别的子域名。例如,*.quiknode.pro 可以匹配 api.quiknode.prodev.quiknode.pro,但 不能 匹配 sub.api.quiknode.pro 这种多级子域名。

  • 您的连接尝试:您正在尝试连接 magical-cosmological-leaf.SOLANA_DEVNET.quiknode.pro,它有两个子域名级别(magical-cosmological-leafSOLANA_DEVNET),这不符合 *.quiknode.pro 的匹配规则,导致 TLS 验证失败。

解决方案

  1. 验证并修正 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 证书不匹配问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部