gpt4 book ai didi

security - 通过不安全的网络轻松安全地连接(两个端点都完全受控)

转载 作者:IT王子 更新时间:2023-10-29 01:24:56 25 4
gpt4 key购买 nike

我需要通过不受信任的网络连接客户端和服务器。我考虑过使用 TLS (crypto/tls) ,但据我了解,我首先需要创建一个 crypto/x509.Certificate .但是我对需要传递给 x509.CreateCertificate() function 的所有参数感到不知所措。 - 它说它需要以下所有字段:

SerialNumber, Subject, NotBefore, NotAfter, KeyUsage, BasicConstraintsValid, IsCA, MaxPathLen, SubjectKeyId, DNSNames, PermittedDNSDomainsCritical, PermittedDNSDomains.

我可以完全控制两个端点,所以我相信我不需要任何过期或失效支持/参数(我可以随时更改客户端和服务器上的 key )——所以我可以跳过 NotBeforeNotAfter(?还是我必须设置它们?)。我应该在所有其他字段中输入什么,为什么,以避免任何漏洞?另外,我可以使用相同的私钥/公钥对进行两种身份验证(客户端到服务器,以及服务器到客户端),还是必须使用 2 对?

或者,有没有比我可以使用的 TLS 更简单的东西?但是请注意,我需要双向身份验证。

编辑:

我根据已接受答案的建议以及来自 generate_cert.go 的 key 生成代码创建了一个简单的库- 见:

github.com/akavel/tunnel

最佳答案

Owlstead 部分正确。最好的选择是使用 OpenSSL 创建自签名证书。但是,我随后会使用 Go TLS 库进行加密。下面是一些可能对您有所帮助的代码。

创建 x509 key 对

我通常遵循说明 here .命令摘要(对客户端和服务器执行):

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

使用 Go 的 TLS 库

首先,创建一个tls.Config。一个 TLS 配置将在客户端和服务器上工作,但一些选项只需要在一个或另一个上设置:

cert, err := tls.LoadX509KeyPair(cert, key)
config := &tls.Config{
Certificates: []Certificates{cert},
ClientAuth: tls.RequireAnyClientCert, // Must be done on server
InsecureSkipVerify: true, // Must be done on client
}

在服务器上,您需要设置一个 TLS 监听器。这将其设置在端口 4443 上:

listener, err := tls.Listen("tcp", ":4443", config)
for {
conn, err := listener.Accept()
acceptConn(conn) // your code
}

在客户端:

conn, err := tls.Dial("tcp", serverAddr, config)

这将创建一个加密连接,但它不会验证对方是否是他们所说的人。最简单的方法是为每台服务器提供另一台服务器的公钥,并将其与刚刚连接的服务器进行比较。要在另一台服务器上找到公钥,您需要:

c := conn.(*tls.Conn) // convert net.Conn from listener to tls conn
err := c.Handshake() // ensure handshake is completed without error
state := c.ConnectionState()
pubKey, err := x509.MarshalPKIXPublicKey(state.PeerCertificates[0])
bytes.Equal(pubKey, knownKey) // compare to known value

关于security - 通过不安全的网络轻松安全地连接(两个端点都完全受控),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12239555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com