Skip to content

Commit 94d7217

Browse files
authored
Merge pull request #457 from hyde-zhang/main
Make use of SocketCAFile config
2 parents 8c26237 + bd4a36c commit 94d7217

File tree

2 files changed

+57
-21
lines changed

2 files changed

+57
-21
lines changed

tls.go

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -35,33 +35,40 @@ func loadTLSConfig(settings *SessionSettings) (tlsConfig *tls.Config, err error)
3535
}
3636

3737
if !settings.HasSetting(config.SocketPrivateKeyFile) && !settings.HasSetting(config.SocketCertificateFile) {
38-
if allowSkipClientCerts {
39-
tlsConfig = defaultTLSConfig()
40-
tlsConfig.ServerName = serverName
41-
tlsConfig.InsecureSkipVerify = insecureSkipVerify
42-
setMinVersionExplicit(settings, tlsConfig)
38+
if !allowSkipClientCerts {
39+
return
4340
}
44-
return
45-
}
46-
47-
privateKeyFile, err := settings.Setting(config.SocketPrivateKeyFile)
48-
if err != nil {
49-
return
50-
}
51-
52-
certificateFile, err := settings.Setting(config.SocketCertificateFile)
53-
if err != nil {
54-
return
5541
}
5642

5743
tlsConfig = defaultTLSConfig()
58-
tlsConfig.Certificates = make([]tls.Certificate, 1)
5944
tlsConfig.ServerName = serverName
6045
tlsConfig.InsecureSkipVerify = insecureSkipVerify
6146
setMinVersionExplicit(settings, tlsConfig)
6247

63-
if tlsConfig.Certificates[0], err = tls.LoadX509KeyPair(certificateFile, privateKeyFile); err != nil {
64-
return
48+
if settings.HasSetting(config.SocketPrivateKeyFile) || settings.HasSetting(config.SocketCertificateFile) {
49+
50+
var privateKeyFile string
51+
var certificateFile string
52+
53+
privateKeyFile, err = settings.Setting(config.SocketPrivateKeyFile)
54+
if err != nil {
55+
return
56+
}
57+
58+
certificateFile, err = settings.Setting(config.SocketCertificateFile)
59+
if err != nil {
60+
return
61+
}
62+
63+
tlsConfig.Certificates = make([]tls.Certificate, 1)
64+
65+
if tlsConfig.Certificates[0], err = tls.LoadX509KeyPair(certificateFile, privateKeyFile); err != nil {
66+
return
67+
}
68+
}
69+
70+
if !allowSkipClientCerts {
71+
tlsConfig.ClientAuth = tls.RequireAndVerifyClientCert
6572
}
6673

6774
if !settings.HasSetting(config.SocketCAFile) {
@@ -86,7 +93,6 @@ func loadTLSConfig(settings *SessionSettings) (tlsConfig *tls.Config, err error)
8693

8794
tlsConfig.RootCAs = certPool
8895
tlsConfig.ClientCAs = certPool
89-
tlsConfig.ClientAuth = tls.RequireAndVerifyClientCert
9096

9197
return
9298
}

tls_test.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (s *TLSTestSuite) TestLoadTLSNoCA() {
6060
s.Len(tlsConfig.Certificates, 1)
6161
s.Nil(tlsConfig.RootCAs)
6262
s.Nil(tlsConfig.ClientCAs)
63-
s.Equal(tls.NoClientCert, tlsConfig.ClientAuth)
63+
s.Equal(tls.RequireAndVerifyClientCert, tlsConfig.ClientAuth)
6464
}
6565

6666
func (s *TLSTestSuite) TestLoadTLSWithBadCA() {
@@ -87,6 +87,36 @@ func (s *TLSTestSuite) TestLoadTLSWithCA() {
8787
s.Equal(tls.RequireAndVerifyClientCert, tlsConfig.ClientAuth)
8888
}
8989

90+
func (s *TLSTestSuite) TestLoadTLSWithOnlyCA() {
91+
s.settings.GlobalSettings().Set(config.SocketUseSSL, "Y")
92+
s.settings.GlobalSettings().Set(config.SocketCAFile, s.CAFile)
93+
94+
tlsConfig, err := loadTLSConfig(s.settings.GlobalSettings())
95+
s.Nil(err)
96+
s.NotNil(tlsConfig)
97+
98+
s.NotNil(tlsConfig.RootCAs)
99+
s.NotNil(tlsConfig.ClientCAs)
100+
}
101+
102+
func (s *TLSTestSuite) TestLoadTLSWithoutSSLWithOnlyCA() {
103+
s.settings.GlobalSettings().Set(config.SocketCAFile, s.CAFile)
104+
105+
tlsConfig, err := loadTLSConfig(s.settings.GlobalSettings())
106+
s.Nil(err)
107+
s.Nil(tlsConfig)
108+
}
109+
110+
func (s *TLSTestSuite) TestLoadTLSAllowSkipClientCerts() {
111+
s.settings.GlobalSettings().Set(config.SocketUseSSL, "Y")
112+
113+
tlsConfig, err := loadTLSConfig(s.settings.GlobalSettings())
114+
s.Nil(err)
115+
s.NotNil(tlsConfig)
116+
117+
s.Equal(tls.NoClientCert, tlsConfig.ClientAuth)
118+
}
119+
90120
func (s *TLSTestSuite) TestServerNameUseSSL() {
91121
s.settings.GlobalSettings().Set(config.SocketUseSSL, "Y")
92122
s.settings.GlobalSettings().Set(config.SocketServerName, "DummyServerNameUseSSL")

0 commit comments

Comments
 (0)