-
Notifications
You must be signed in to change notification settings - Fork 462
[xserver] TLS support added to xserver, aggregator server, and aggregator client #4266
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 4 commits
f252408
413d9d3
a57d5a6
3a206dc
f32c307
92e0920
4c798f8
8c4513a
446d2ef
d992b6f
74d9e77
09e549d
d841bcf
702563d
b89c701
94a5706
414711b
1ee36de
c450333
7997a01
8fd3c43
2c78899
19e99e0
3068241
1f1444d
4e05948
ec56885
f2594b2
d53144b
8582081
89e7e36
161a547
c4fb2d2
96aa72c
cae4342
6a44f2e
e848c97
a07157d
001ccb3
2e39e94
ed12ea4
2a2a17e
1b3ec54
5a81da4
b582bc5
8ba3134
e8b051c
f35027c
ace2a95
2e9ed48
343a770
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -22,9 +22,13 @@ package client | |
|
|
||
| import ( | ||
| "context" | ||
| "crypto/tls" | ||
| "crypto/x509" | ||
| "errors" | ||
| "fmt" | ||
| "math/rand" | ||
| "net" | ||
| "os" | ||
| "sync" | ||
| "time" | ||
|
|
||
|
|
@@ -77,6 +81,7 @@ type connection struct { | |
| mtx sync.Mutex | ||
| keepAlive bool | ||
| dialer xnet.ContextDialerFn | ||
| tls TLSOptions | ||
| } | ||
|
|
||
| // newConnection creates a new connection. | ||
|
|
@@ -101,6 +106,7 @@ func newConnection(addr string, opts ConnectionOptions) *connection { | |
| xio.ResettableWriterOptions{WriteBufferSize: 0}, | ||
| ), | ||
| metrics: newConnectionMetrics(opts.InstrumentOptions().MetricsScope()), | ||
| tls: opts.TLSOptions(), | ||
| } | ||
| c.connectWithLockFn = c.connectWithLock | ||
| c.writeWithLockFn = c.writeWithLock | ||
|
|
@@ -152,6 +158,34 @@ func (c *connection) Close() { | |
| c.mtx.Unlock() | ||
| } | ||
|
|
||
| func (c *connection) upgradeToTLS(conn net.Conn) (net.Conn, error) { | ||
| certPool := x509.NewCertPool() | ||
roman-mazhut marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| if c.tls.CAFile() != "" { | ||
| certs, err := os.ReadFile(c.tls.CAFile()) | ||
|
||
| if err != nil { | ||
| return conn, fmt.Errorf("read bundle error: %w", err) | ||
| } | ||
| if ok := certPool.AppendCertsFromPEM(certs); !ok { | ||
| return conn, fmt.Errorf("cannot append cert to cert pool") | ||
| } | ||
| } | ||
| tlsConfig := &tls.Config{ | ||
| RootCAs: certPool, | ||
| InsecureSkipVerify: c.tls.InsecureSkipVerify(), | ||
| ServerName: c.tls.ServerName(), | ||
| } | ||
| if c.tls.CertFile() != "" && c.tls.KeyFile() != "" { | ||
| tlsConfig.GetClientCertificate = func(*tls.CertificateRequestInfo) (*tls.Certificate, error) { | ||
| cert, err := tls.LoadX509KeyPair(c.tls.CertFile(), c.tls.KeyFile()) | ||
| if err != nil { | ||
| return nil, fmt.Errorf("load x509 key pair error: %w", err) | ||
| } | ||
| return &cert, nil | ||
| } | ||
| } | ||
| return tls.Client(conn, tlsConfig), nil | ||
| } | ||
|
|
||
| // writeAttemptWithLock attempts to establish a new connection and writes raw bytes | ||
| // to the connection while holding the write lock. | ||
| // If the write succeeds, c.conn is guaranteed to be a valid connection on return. | ||
|
|
@@ -192,6 +226,15 @@ func (c *connection) connectWithLock() error { | |
| } | ||
| } | ||
|
|
||
| if c.tls.TLSEnabled() { | ||
| conn, err = c.upgradeToTLS(conn) | ||
| if err != nil { | ||
roman-mazhut marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| c.metrics.connectError.Inc(1) | ||
| conn.Close() | ||
| return err | ||
| } | ||
| } | ||
|
|
||
| if c.conn != nil { | ||
| c.conn.Close() // nolint: errcheck | ||
| } | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| -----BEGIN CERTIFICATE----- | ||
| MIIDPzCCAicCFFJVDW2T6lamcRZYStsBCQTKicKwMA0GCSqGSIb3DQEBCwUAMFox | ||
| CzAJBgNVBAYTAk5MMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl | ||
| cm5ldCBXaWRnaXRzIFB0eSBMdGQxEzARBgNVBAMMClRlc3RSb290Q0EwHhcNMjQw | ||
| NDE1MTQ0NjEyWhcNMzQwNDEzMTQ0NjEyWjBeMQswCQYDVQQGEwJOTDETMBEGA1UE | ||
| CAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk | ||
| MRcwFQYDVQQDDA5UZXN0Q2xpZW50Q2VydDCCASIwDQYJKoZIhvcNAQEBBQADggEP | ||
| ADCCAQoCggEBAMXgv5tgZD5iBW3LfTC27jPHTLlsAw8ZlBFLmd7potdS3Hy512Xa | ||
| kKOaKRKH/0Yla4BKGNh0ZP+xege15CpTFqwtzDPCRkaRvfSxRW19MukeergRDqqI | ||
| tEwURHQ5gfub7XB9e5wuNmW2GGs/xgiWsxxm6UMidXkhA5a2//OmDSm2JdcoxJbk | ||
| 1m1OUzXUuLKLzCIRAbJFFIM1RpvjWSonxpJ2lsNCVQ+LdItxE9mAI+Y+PaDonyzg | ||
| ehfAqkl+wxGRevaDFFJr1defxmnJhaYv40AcEpXOWeetZFlspEtrPF7b/3GifRdx | ||
| Mlwq27wn3mk4wF1wa12kRNKiz+HHjZrB7UECAwEAATANBgkqhkiG9w0BAQsFAAOC | ||
| AQEAKblZ+C4Pdv5grKiCQcfFt53SbIys8uavxmzJNn9nq1QVgBmR/hX8yG8ULeh5 | ||
| kKrccwe2WXCBWsIj9cvGCzR+MPMvuIXd3d58yLybmIUBDfJSBC0v5TaNWP2ZdJDG | ||
| fH38DfQTeE9XcjpRtCGYtYwReBptSlNiYQlvwkukTNz3mV+0BpvQu/9/R0BNCJAF | ||
| 9VeLgUcG7T7HC+foCeU7h83Y0xH0OALe33ntcrMPHUclXqImCiC7dl8pb3H7o/xJ | ||
| jS3KZxfv6ioxpirvpEbX/EeF+H1HQZUZ8y3+J3K37jMgzNamd/xsaJxEfCq4SE+n | ||
| HmgeXgqoNjrM6J0jYAfx1MjbIA== | ||
| -----END CERTIFICATE----- |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| -----BEGIN RSA PRIVATE KEY----- | ||
| MIIEowIBAAKCAQEAxeC/m2BkPmIFbct9MLbuM8dMuWwDDxmUEUuZ3umi11LcfLnX | ||
| ZdqQo5opEof/RiVrgEoY2HRk/7F6B7XkKlMWrC3MM8JGRpG99LFFbX0y6R56uBEO | ||
| qoi0TBREdDmB+5vtcH17nC42ZbYYaz/GCJazHGbpQyJ1eSEDlrb/86YNKbYl1yjE | ||
| luTWbU5TNdS4sovMIhEBskUUgzVGm+NZKifGknaWw0JVD4t0i3ET2YAj5j49oOif | ||
| LOB6F8CqSX7DEZF69oMUUmvV15/GacmFpi/jQBwSlc5Z561kWWykS2s8Xtv/caJ9 | ||
| F3EyXCrbvCfeaTjAXXBrXaRE0qLP4ceNmsHtQQIDAQABAoIBAAtyP8MuJT5SjzvV | ||
| rI0317mZCsAjFl42PZFujR0O6MOJ4IU6ftI+fWVpUnzm7wZQvdIy9xL2UK1Vx9hQ | ||
| Vj14hvQ4xfosf8IvRgy0gG6f8mT3xWOGYRHOTJemCHuso+85CtgZ+h+DsNPbX7g8 | ||
| fSkcBopbDZ07jg4OsdVzCoU+kr5Z1/VDe0O0rTDzGVP686tN9I+DmDYv2HlBUaSZ | ||
| SyNZrLJFziqFx4ATTIE3aTLd29pzTl09WiCcZSxhlS+ROnN2iW2xDLNgY9SdUo2a | ||
| 3r8N+xhYDNQz2paxlsv2x/tCRJvrQDoX7S5QZw4P1pVr6wo6xC+BU2UlpVHifo4M | ||
| egyDbAECgYEA5Y9+JDOSQF2cvIV4xTMgVnkLig/ngYesS44xz8HYTRR5s1WW6oCX | ||
| 3j+OosZBbJpXeBlTK31G9Z92+Om2/Cj2uDvff7EJdhZ5sAdMtUy5X7p9rGTEyi5F | ||
| ecZDBfmwHH0lFdwpNtlky1uoaUsVd4IS28WMHoHYDGW241IW8xOlmeECgYEA3Ksb | ||
| KR7JCbHx21wh5oPVn5BLpdag7D+M1jBFtjPrzLDNhXlsV9zkjn7xETvTXWU2vNlh | ||
| OkoRu4VFEAnsgtxh+gT0lo9ZG9IWi2qP99vPpB3AFYuujBu3GA02/iOo5pri/6R0 | ||
| ZNEEreAaaOcT2z6K9HG0KMQ6QpYgXSlzJW8sf2ECgYEAvn2fMA03bIAB4xJi0EkH | ||
| qZoScEOYWQ0rdRsOzJbPlc7K2nzImdmRrFRTWVFo0uUUdk2VjX4Mlx/3ir/uHzsi | ||
| 2GieowhWkI4/9kloZv2+yegoBxkrj5ZsAov57AhxEoLqdkRWUvR8xp9Nleo/awcd | ||
| /Q7loh8fF9KDvAjPkHAaOCECgYA98bZNI7wxgYcwGbvWdrmX8iyaIBbKWsiRM7nN | ||
| /OM7cYIv7rbwLyzlp1LKkK2zsP7donP9pd82caHCb9a5oV3LjmqOfSz5d08m0cIa | ||
| RNUT79oE8lIMOJd8I/GFA8OdAGuqcaLOzjHvEVK4ke1sBTGCjwyQyQzFtljdbg5J | ||
| utyV4QKBgHkSBKwrgaump08MJFfK9uFo5sr5jy692XYWMlBVhc+piPwUsoztjI1O | ||
| 8cvie0mMj6oofSoSyD4FUg9kFUCRMPC0kga/zlHyL1Y/uILX4XUFMl4P/gMbC7kw | ||
| 0d6BdEsp5SU8Onc9eV/EW+q2Mz7/t5ZHkUrdDQYGgkIBqRZcXlka | ||
| -----END RSA PRIVATE KEY----- |
Uh oh!
There was an error while loading. Please reload this page.