Golang TLS测试,服务器和客户端在每次执行时协商相同的密钥,以便于调试。

huangapple go评论150阅读模式
英文:

Golang TLS test where server and client negociate the same keys at every execution to facilitate debugging

问题

我有一个针对使用crypto/tls启动TLS客户端和服务器的golang项目的测试用例。我的测试访问客户端和服务器交换的密文以运行断言。

我正在寻找一种在连续执行测试时获取相同密文的方法。

协商密钥的值和服务器返回的明文对于测试不相关。

英文:

I have a test case for a golang project that uses crypto/tls to start a TLS client and a server. My test accesses the ciphertexts exchanged by the client and server to run assertions.

I'm looking for a way to get the same ciphertexts across consecutive executions of the test.

The values of the negotiated keys and the plaintext returned by the server are not relevant to the test.

答案1

得分: 0

tls示例的测试样本可以帮助你,为tls.configRand定义一个实现了Read接口的zeroSource

type zeroSource struct{}

func (zeroSource) Read(b []byte) (n int, err error) {
	for i := range b {
		b[i] = 0
	}
    // 将相同的密钥分配给b

	return len(b), nil
}

// 服务器端
server.TLS = &tls.Config{
	Rand: zeroSource{}, // 仅作为示例;不要这样做。
}

// 客户端
client := &http.Client{
	Transport: &http.Transport{
		TLSClientConfig: &tls.Config{
			Rand:               zeroSource{}, // 为了可重现的输出;不要这样做。
		},
	},
}
英文:

The test sample of tls sample could help you, define one zeroSource implemented Read interface for Rand of tls.config.

type zeroSource struct{}

func (zeroSource) Read(b []byte) (n int, err error) {
	for i := range b {
		b[i] = 0
	}
    // assign the same key to b

	return len(b), nil
}

// server side
	server.TLS = &tls.Config{
		Rand: zeroSource{}, // for example only; don't do this.
	}

// client side
	client := &http.Client{
		Transport: &http.Transport{
			TLSClientConfig: &tls.Config{
				Rand:               zeroSource{}, // for reproducible output; don't do this.
			},
		},
	}

huangapple
  • 本文由 发表于 2022年10月26日 18:55:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/74206618.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定