英文:
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.config
的Rand
定义一个实现了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.
},
},
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论