diff --git a/README.md b/README.md index 2eb0bdb..6b37488 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,11 @@ This repository contains the Nebula Graph Console for Nebula Graph 2.0. Nebula G | `-t/-timeout` | Sets an integer-type timeout threshold for the connection. The unit is second. The default value is 120. | | `-e/-eval` | Sets a string-type nGQL statement. The nGQL statement is executed once the connection succeeds. The connection stops after the result is returned. | | `-f/-file` | Sets the path of an nGQL file. The nGQL statements in the file are executed once the connection succeeds. You'll get the return messages and the connection stops then. | + | `-enable_ssl` | Enable SSL when connecting to Nebula Graph | + | `ssl_root_ca_path` | Sets the path of the certification authority file | + | `ssl_cert_path` | Sets the path of the certificate file | + | `ssl_private_key_path` | Sets the path of the private key file | + | `ssl_insecure_skip_verify` | Controls whether a client verifies the server's certificate chain and host name | E.g., diff --git a/go.mod b/go.mod index 7af3dd2..e27b5bc 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,6 @@ go 1.11 require ( github.com/jedib0t/go-pretty/v6 v6.0.5 github.com/jievince/liner v1.2.3 - github.com/vesoft-inc/nebula-go/v2 v2.5.1 + github.com/vesoft-inc/nebula-go/v2 v2.5.2-0.20211022090042-44efb04f7b43 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect ) diff --git a/go.sum b/go.sum index bf5a724..d9fd9b7 100644 --- a/go.sum +++ b/go.sum @@ -22,8 +22,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/vesoft-inc/nebula-go/v2 v2.5.1 h1:y4gBQzRqb3W4jeBbbAdtCPxVZ4tXKv9TJLHjNuWGhI0= -github.com/vesoft-inc/nebula-go/v2 v2.5.1/go.mod h1:fehDUs97/mpmxXi9WezhznX0Dg7hmQRUoOWgDZv9zG0= +github.com/vesoft-inc/nebula-go/v2 v2.5.2-0.20211022090042-44efb04f7b43 h1:26tpwdUIsvBRiWmTCpK90STfXXV4HiKLfjcWm9YRvXQ= +github.com/vesoft-inc/nebula-go/v2 v2.5.2-0.20211022090042-44efb04f7b43/go.mod h1:fehDUs97/mpmxXi9WezhznX0Dg7hmQRUoOWgDZv9zG0= golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/main.go b/main.go index 0e657af..be9bff8 100644 --- a/main.go +++ b/main.go @@ -7,8 +7,11 @@ package main import ( + "crypto/tls" + "crypto/x509" "flag" "fmt" + "io/ioutil" "log" "os" "path" @@ -279,6 +282,56 @@ func loop(c cli.Cli) error { } } +func openAndReadFile(path string) ([]byte, error) { + // open file + f, err := os.Open(path) + if err != nil { + return nil, fmt.Errorf("unable to open file %s: %s", path, err) + } + // read file + b, err := ioutil.ReadAll(f) + if err != nil { + return nil, fmt.Errorf("unable to ReadAll of file %s: %s", path, err) + } + return b, nil +} + +func genSslConfig(rootCAPath, certPath, privateKeyPath string) (*tls.Config, error) { + rootCA, err := openAndReadFile(rootCAPath) + if err != nil { + return nil, err + } + cert, err := openAndReadFile(certPath) + if err != nil { + return nil, err + } + privateKey, err := openAndReadFile(privateKeyPath) + if err != nil { + return nil, err + } + + // generate the client certificate + clientCert, err := tls.X509KeyPair(cert, privateKey) + if err != nil { + return nil, err + } + + // parse root CA pem and add into CA pool + rootCAPool := x509.NewCertPool() + ok := rootCAPool.AppendCertsFromPEM(rootCA) + if !ok { + return nil, fmt.Errorf("fail to append supplied cert into tls.Config, please make sure it is a valid certificate") + } + + // set tls config + // InsecureSkipVerify is set to true for test purpose ONLY. DO NOT use it in production. + return &tls.Config{ + Certificates: []tls.Certificate{clientCert}, + RootCAs: rootCAPool, + InsecureSkipVerify: *sslInsecureSkipVerify, + }, nil +} + // Nebula Console version related var ( gitCommit string @@ -286,14 +339,19 @@ var ( ) var ( - address *string = flag.String("addr", "127.0.0.1", "The Nebula Graph IP/HOST address") - port *int = flag.Int("P", -1, "The Nebula Graph Port") - username *string = flag.String("u", "", "The Nebula Graph login user name") - password *string = flag.String("p", "", "The Nebula Graph login password") - timeout *int = flag.Int("t", 0, "The Nebula Graph client connection timeout in seconds, 0 means never timeout") - script *string = flag.String("e", "", "The nGQL directly") - file *string = flag.String("f", "", "The nGQL script file name") - version *bool = flag.Bool("v", false, "The Nebula Console version") + address *string = flag.String("addr", "127.0.0.1", "The Nebula Graph IP/HOST address") + port *int = flag.Int("P", -1, "The Nebula Graph Port") + username *string = flag.String("u", "", "The Nebula Graph login user name") + password *string = flag.String("p", "", "The Nebula Graph login password") + timeout *int = flag.Int("t", 0, "The Nebula Graph client connection timeout in seconds, 0 means never timeout") + script *string = flag.String("e", "", "The nGQL directly") + file *string = flag.String("f", "", "The nGQL script file name") + version *bool = flag.Bool("v", false, "The Nebula Console version") + enableSsl *bool = flag.Bool("enable_ssl", false, "Enable SSL when connecting to Nebula Graph") + sslRootCAPath *string = flag.String("ssl_root_ca_path", "", "SSL root certification authority's file path") + sslCertPath *string = flag.String("ssl_cert_path", "", "SSL certificate's file path") + sslPrivateKeyPath *string = flag.String("ssl_private_key_path", "", "SSL private key's file path") + sslInsecureSkipVerify *bool = flag.Bool("ssl_insecure_skip_verify", false, "Controls whether a client verifies the server's certificate chain and host name.") ) func init() { @@ -311,10 +369,22 @@ func validateFlags() { log.Panicf("Error: argument port is missed!") } if len(*username) == 0 { - log.Panicf("Error: username is empty!") + log.Panicf("Error: argument username is empty!") } if len(*password) == 0 { - log.Panicf("Error: password is empty!") + log.Panicf("Error: argument password is empty!") + } + + if *enableSsl { + if *sslRootCAPath == "" { + log.Panicf("Error: argument ssl_root_ca_path should be specified when enable_ssl is true") + } + if *sslCertPath == "" { + log.Panicf("Error: argument ssl_cert_path should be specified when enable_ssl is true") + } + if *sslPrivateKeyPath == "" { + log.Panicf("Error: argument ssl_private_key_path should be specified when enable_ssl is true") + } } } @@ -353,7 +423,15 @@ func main() { MinConnPoolSize: 0, } var err error - pool, err = nebula.NewConnectionPool(hostList, poolConfig, nebula.DefaultLogger{}) + if *enableSsl { + sslConfig, err2 := genSslConfig(*sslRootCAPath, *sslCertPath, *sslPrivateKeyPath) + if err2 != nil { + log.Panicf(fmt.Sprintf("Fail to generate the ssl config, ssl_root_ca_path: %s, ssl_cert_path: %s, ssl_private_key_path: %s, %s", *sslRootCAPath, *sslCertPath, *sslPrivateKeyPath, err2.Error())) + } + pool, err = nebula.NewSslConnectionPool(hostList, poolConfig, sslConfig, nebula.DefaultLogger{}) + } else { + pool, err = nebula.NewConnectionPool(hostList, poolConfig, nebula.DefaultLogger{}) + } if err != nil { log.Panicf(fmt.Sprintf("Fail to initialize the connection pool, host: %s, port: %d, %s", *address, *port, err.Error())) } diff --git a/test/secrets/test.ca.key b/test/secrets/test.ca.key new file mode 100644 index 0000000..6006d0f --- /dev/null +++ b/test/secrets/test.ca.key @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,6D12ED8559E80FA3 + +tv9epnwlt4dP6Q5ee0dACOyFA5BTwYTdoMykQRJrKGwfaNeXUXn+sQ/U/oFHp1Wx +O8VZE+z2aHpiFSTw+Eh6MPt86X5yVG3tpeVO6dErvr8Kd+NpuI8zn7rNoOFRh8wD +33EFcQMLQPneDl10O18hooIoi0qwp1pd63hYZPwEhB3eOrM5Mnv9OVJs65bzYfyf +Wku33YWYxeqlDvMCsou8PZnv/M2wYsr7+QoTcNmGKP45igMthMDBzwgF+q0p9ZZU +N11c6ojAs01kfuqFf3vKfHNYe6zsBiNhnUuEy8enXSxD5E7tR/OI8aEzPLdk7fmN +/UsMK2LE0Yd5iS3O1x/1ZjSBxJ+M/UzzCO692GTAiD6Hc13iJOavq/vt1mEPjfCD +neF38Bhb5DfFi+UAHrz6EHMreamGCzP82us2maIs7mSTq7nXDZfbBc7mBDLAUUnT +J6tlrTyc+DQXzkJa6jmbxJhcsWm6XvjIBEzSXVHxEDPLnZICQk3VXODjCXTD75Rg +0WaS78Ven7DW8wn07q3VzWAFDKaet3VI+TVTv7EfIavlfiA6LSshaENdFLeHahNE +s/V/j5K3Pg6+WQcZRgOsfqIwUCSQxY13R6TTdaaCkLay5BggF5iiAO3pkqsJiadf +w843Ak4USBptymJxoZgJyFtQHpQyNiFfsAbs9BaYbg2evvE7/VQhLk0gQ7HgQMeJ +wgxEQqZQKDCCSugSzY1YEGXKnrZYCKyipzyyH936mE15zNwhYp/Pi2020+gmtP3h +CDfcPs1yeLI2/1JuimafbuKsv9xchWa6ASU8p8Q7wTLtUj9ylLKyA4A/75pK0DXG +Hv/q0O+UfhAMD438SoPBle7RSvIsDU1VjUqstlNybBglBZxGIME7/18+Ms7U32wh +4xFkZwxT2nqFgyk37tXMdMz9UBh12/AXR9NU4XY37C3Ao2TDT7/0DvU6KdJhsDpv +rGcaC2zzhko+0CPrLlk52KbqP003JXiWvOSI+FylyPPDB/YGitmndJUuQblf3u/E +l+tGi9MeSBQeWKV6D3AVnO05AZjfTUzSK0vw4DgNh5YPNJvLy31B7kDAS88vyGI1 +t6MBwjW4/tz/nS/p1Go3mSzBhPkIsCrZE+ar7lH8p8JqkLl4fXIMaVKIfyfJdzyS +lkh3K7bOGDPegxxxaWdb+EnC7k+1R3EOU7uJFW61HyrGI3q6Y7kOl5aYSJ5Ge1Uv +PycFWHWVTHq/R7HRE6HIJzGe/PnLIbStXLDFeivjfcYq1YaSaF8Vl+xg+0u3ULOl +P6IuPTph6dlcgttRZVl3ETcF0T+2wfbUwgjf0ZiguCJfR2jLGhPl1KBg0Kd9cTSY +zI3YMMd2G8hApt/QFlm4Ry8CqaJUmDcjDNIJT3M+RldUgfz37NsX05cA5e9+I1AL +2406F/v5U9gWsYx7HuwJtQrDzYYDbl1GD4H+qHFJE5JYhPP4AyWYxJ1NR5dqyvrt ++3r5+xlwZrS76c10RsBWL7th8ZEzRxOZxbtLwbf4bG/tIGfQP2sTnWwA+qym6b2S +sRduqOTP+xwnhOq/ZKn8lfsDfhT8CPnKHBsd09kM9y/UWuxFe0upLydRLE/Wsb9s +-----END RSA PRIVATE KEY----- diff --git a/test/secrets/test.ca.password b/test/secrets/test.ca.password new file mode 100644 index 0000000..143be9a --- /dev/null +++ b/test/secrets/test.ca.password @@ -0,0 +1 @@ +vesoft diff --git a/test/secrets/test.ca.pem b/test/secrets/test.ca.pem new file mode 100644 index 0000000..412ba31 --- /dev/null +++ b/test/secrets/test.ca.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIIEGzCCAwOgAwIBAgIUDcmZFpL4PcdCXfLRBK8bR2vb39cwDQYJKoZIhvcNAQEL +BQAwgZwxCzAJBgNVBAYTAkNOMREwDwYDVQQIDAhaaGVqaWFuZzERMA8GA1UEBwwI +SGFuZ3pob3UxFDASBgNVBAoMC1Zlc29mdCBJbmMuMRAwDgYDVQQLDAdzZWN0aW9u +MRYwFAYDVQQDDA1zaHlsb2NrIGh1YW5nMScwJQYJKoZIhvcNAQkBFhhzaHlsb2Nr +Lmh1YW5nQHZlc29mdC5jb20wHhcNMjEwODE5MDkyNDQ3WhcNMjUwODE4MDkyNDQ3 +WjCBnDELMAkGA1UEBhMCQ04xETAPBgNVBAgMCFpoZWppYW5nMREwDwYDVQQHDAhI +YW5nemhvdTEUMBIGA1UECgwLVmVzb2Z0IEluYy4xEDAOBgNVBAsMB3NlY3Rpb24x +FjAUBgNVBAMMDXNoeWxvY2sgaHVhbmcxJzAlBgkqhkiG9w0BCQEWGHNoeWxvY2su +aHVhbmdAdmVzb2Z0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AMEAgpamCQHl+8JnUHI6/VmJHjDLYJLTliN/CwpFrhMqIVjJ8wG57WYLpXpn91Lz +eHu52LkVzcikybIJ2a+LOTvnhNFdbmTbqDtrb+s6wM/sO+nF6tU2Av4e5zhyKoeR +LL+rHMk3nymohbdN4djySFmOOU5A1O/4b0bZz4Ylu995kUawdiaEo13BzxxOC7Ik +Gge5RyDcm0uLXZqTAPy5Sjv/zpOyj0AqL1CJUH7XBN9OMRhVU0ZX9nHWl1vgLRld +J6XT17Y9QbbHhCNEdAmFE5kEFgCvZc+MungUYABlkvoj86TLmC/FMV6fWdxQssyd +hS+ssfJFLaTDaEFz5a/Tr48CAwEAAaNTMFEwHQYDVR0OBBYEFK0GVrQx+wX1GCHy +e+6fl4X+prmYMB8GA1UdIwQYMBaAFK0GVrQx+wX1GCHye+6fl4X+prmYMA8GA1Ud +EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAHqP8P+ZUHmngviHLSSN1ln5 +Mx4BCkVeFRUaFx0yFXytV/iLXcG2HpFg3A9rAFoYgCDwi1xpsERnBZ/ShTv/eFOc +IxBY5yggx3/lGi8tAgvUdarhd7mQO67UJ0V4YU3hAkbnZ8grHHXj+4hfgUpY4ok6 +yaed6HXwknBb9W8N1jZI8ginhkhjaeRCHdMiF+fBvNCtmeR1bCml1Uz7ailrpcaT +Mf84+5VYuFEnaRZYWFNsWNCOBlJ/6/b3V10vMXzMmYHqz3xgAq0M3fVTFTzopnAX +DLSzorL/dYVdqEDCQi5XI9YAlgWN4VeGzJI+glkLOCNzHxRNP6Qev+YI+7Uxz6I= +-----END CERTIFICATE----- diff --git a/test/secrets/test.ca.srl b/test/secrets/test.ca.srl new file mode 100644 index 0000000..fbf9cac --- /dev/null +++ b/test/secrets/test.ca.srl @@ -0,0 +1 @@ +7E73E19D9FB0276F6149040F5FEB802543EBB3F9 diff --git a/test/secrets/test.client.crt b/test/secrets/test.client.crt new file mode 100644 index 0000000..f50fa81 --- /dev/null +++ b/test/secrets/test.client.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDZjCCAk4CFH5z4Z2fsCdvYUkED1/rgCVD67P5MA0GCSqGSIb3DQEBCwUAMIGc +MQswCQYDVQQGEwJDTjERMA8GA1UECAwIWmhlamlhbmcxETAPBgNVBAcMCEhhbmd6 +aG91MRQwEgYDVQQKDAtWZXNvZnQgSW5jLjEQMA4GA1UECwwHc2VjdGlvbjEWMBQG +A1UEAwwNc2h5bG9jayBodWFuZzEnMCUGCSqGSIb3DQEJARYYc2h5bG9jay5odWFu +Z0B2ZXNvZnQuY29tMB4XDTIxMDkyODEyMzk1NloXDTI0MDEwMTEyMzk1NlowQjEL +MAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UECgwTRGVm +YXVsdCBDb21wYW55IEx0ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANqFy+Fhsb9ptr9CfcmqAt/AP2ibrUH1j9UVQZTwgSrApAAOjgWqLWaO+o6gz7Ds +ZSSx6OBXpyuA+blYcCeFjr45c2l4sdpy6G9bfSOKCzh8yZLlPAaDzgbNnsta/kqR +fePM3kV2DWxQQEXXKyHCjMgYPFl2nVpJ4/z669SLvDCr4UocmE7PG5OcK4AURgnc +eIGLszurBBgyFmxKZVxrdMRx5Xmidi8gIL5i97laMGWE6qtiOSRnWoh52vdB+2Dm +rkByY/7tsApXRPzSNjA/D9DYRzN7n3gz/2ndUFO7qLZBNv9rnvauqeaksdP+xpWb +jfMG7rVV6w7bE2PGqLp4v4kCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAhyJ/ZgYR +2EddiwHPT+twKTzgUjPKgnSkCfAE0dTRlkZIB9K/XPKhoG1ocalgxuyfwTKQhSmf +uWcV43jWpj9rizERcekugJoElz9JqF19u01RdoIIv10aZVb4+nhpYJ3ETNlV+pM6 +59WgSGqx53Cbrm9WaVqepGsFHtpU9SGZ/kmL4Yu9omWoyJ1uOf1aO4T9q5M/kA8O +Feb3MKTUwBZn+axsIzMpnNlqhltvLzPvTfVP/s9bzbP/VsQkIpNOM833gVU1IREM +LMNTliOkO6heVHs5tja9NjgTmpgZJASbUk5k7xAVk7obrlD/auYo/HN+pMMCsSeu +WMAMtzWQz/fA9w== +-----END CERTIFICATE----- diff --git a/test/secrets/test.client.csr b/test/secrets/test.client.csr new file mode 100644 index 0000000..4468adc --- /dev/null +++ b/test/secrets/test.client.csr @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICnjCCAYYCAQAwQjELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0 +eTEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANqFy+Fhsb9ptr9CfcmqAt/AP2ibrUH1j9UVQZTwgSrA +pAAOjgWqLWaO+o6gz7DsZSSx6OBXpyuA+blYcCeFjr45c2l4sdpy6G9bfSOKCzh8 +yZLlPAaDzgbNnsta/kqRfePM3kV2DWxQQEXXKyHCjMgYPFl2nVpJ4/z669SLvDCr +4UocmE7PG5OcK4AURgnceIGLszurBBgyFmxKZVxrdMRx5Xmidi8gIL5i97laMGWE +6qtiOSRnWoh52vdB+2DmrkByY/7tsApXRPzSNjA/D9DYRzN7n3gz/2ndUFO7qLZB +Nv9rnvauqeaksdP+xpWbjfMG7rVV6w7bE2PGqLp4v4kCAwEAAaAXMBUGCSqGSIb3 +DQEJBzEIDAYxMjM0NTYwDQYJKoZIhvcNAQELBQADggEBAHWHy1/p9Vn9klqdADBl +74SFoPFg6ErUQyBtBAJf+9m43hPIH7UNiPXb7R3p8fnsnKEO6Rb37I9nY3WeMLaG +MLjzzHg1+cbjgfsbFa/IZbjeRwVTAil5h/9E8Hm7E3fIllwetAFSIXOs1CvsCieR +zi+fnyX0s+az3AaV74wB2+1EODq+881oj6Y063DNa43fop7vHq37KJP0DnjjF3pv +xtf6uyyKvNhsEh4gIRBdEzBJ4A00TcI+uZ3gOdYEv7sIjwmKZzzEHFgpNXbj1D2Y +QLtZ/d+BwxN4ItzuyMYEc7sTlEKZJQvH1C8DA7SgIT3BSyRC8TQsBUWZ7tg1StlM +jLI= +-----END CERTIFICATE REQUEST----- diff --git a/test/secrets/test.client.key b/test/secrets/test.client.key new file mode 100644 index 0000000..2c4eaca --- /dev/null +++ b/test/secrets/test.client.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA2oXL4WGxv2m2v0J9yaoC38A/aJutQfWP1RVBlPCBKsCkAA6O +BaotZo76jqDPsOxlJLHo4FenK4D5uVhwJ4WOvjlzaXix2nLob1t9I4oLOHzJkuU8 +BoPOBs2ey1r+SpF948zeRXYNbFBARdcrIcKMyBg8WXadWknj/Prr1Iu8MKvhShyY +Ts8bk5wrgBRGCdx4gYuzO6sEGDIWbEplXGt0xHHleaJ2LyAgvmL3uVowZYTqq2I5 +JGdaiHna90H7YOauQHJj/u2wCldE/NI2MD8P0NhHM3ufeDP/ad1QU7uotkE2/2ue +9q6p5qSx0/7GlZuN8wbutVXrDtsTY8aouni/iQIDAQABAoIBAAoCevZV/UhhVUep +ig2ExiDts3ndN7B/yRjfomNqKOCGdnyyLftAclfyULPb1eeqzG9D3wD3wuaRP98n +l+uXiJRaGVlJeAwjm1YOgMrx9dWekbUy3u8FdpiFLrLt9hwAUh3vMndIExFVE7yf +QJCJUt2PjqQidM6/97uM2uSfif1IrJCVt7G9Q1ukI2X5RsTihmFLJjVkfYE83T5N +8wNGKKDyy+PuMjXl3gaHux7mOiorILHVFqzMMzgfEvghobTN/axLEAzgVJu+0Sqq +XrueMht4QIIST5ix1d9KN9kGZ5dq1MJ4Lfy5NjZ6eYhxdkq41O3USSJQQN/zW+uM +Ig/0JAECgYEA/DsRsWfaV7vo/fh0rZGP5pRDUSXKXliqnyukjCPTyuk9VHOSIDPh +uEvcdcP47iu2VwnKum5RRS8lu0Nd4I3qmvgepUp71cBsM9Bn/89WoLU5/lw3pbDs +saOW1lI5kZ/FCzDSGnGLFcC8PMd9MmqUIzzOkhvDn2XiQGeOkv5b7UECgYEA3cnG +JTNIPg1L55fwX9Uj3tyb03T8iqdHd6oeUS+fsBKDdgOrL5lW+WIsUJ1uIUZ8+pA2 +v4f2W+4yQueEcDvmi3+GB12Zzlfz26n7O9ZW+cvE1NZXycRtdZaDRFijovTZnnpv +3SFvDcdc8aUQ833SZ5XhzykPCfrRRFNd+x8EGEkCgYAhsfZsH7aQb97xRqa3pTF3 +GSlhBs5hCjFI8DicLBEYE06JIKNNwACQcTnzVYnEr3w9ZmZ5v1EGEAVXXemFnQ/R +QgI+DJQ8euc5iMbL6rPk5jDoJQOeE+Oa24LEANoF9TUKiKwYskBlWIkNCY1VFd3S +U0Y5SJI6kg7Gkc7/HhHDwQKBgQCT1zqT9ZlEc8yTNn7vAr8Egf4FeMgXDObg56+J +4rsJvW2QL2XfNtH5Lu3nVungmIIa7CLyjYk1QpSScI2h2uwVNQ58vnIWUB6n4Kkt ++/TCUoiEb9TZFGz6ozghSQzbRWgC8g67UtwaTTixg5zHEqo8jnaVhwMVXfI9H21Y +RhaOsQKBgQCOf8JLdIEMH8z0bGh2He0mv0qBcN9EUuhSw85+JZUReq+2sEeT8zM3 +hl1RMXKS3K+u8IiGAffESju5EK85/hD0NsSv4EGOWfuuN4/jRQ9MGJ9kEL6BBM9T +FAxvY63PS6yOy+rgT21dc8GOjlM1DOTPZzCrnKW1kvwaBsSZeNF59A== +-----END RSA PRIVATE KEY----- diff --git a/test/secrets/test.self-signed.key b/test/secrets/test.self-signed.key new file mode 100644 index 0000000..5a94b69 --- /dev/null +++ b/test/secrets/test.self-signed.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAwQCClqYJAeX7wmdQcjr9WYkeMMtgktOWI38LCkWuEyohWMnz +AbntZgulemf3UvN4e7nYuRXNyKTJsgnZr4s5O+eE0V1uZNuoO2tv6zrAz+w76cXq +1TYC/h7nOHIqh5Esv6scyTefKaiFt03h2PJIWY45TkDU7/hvRtnPhiW733mRRrB2 +JoSjXcHPHE4LsiQaB7lHINybS4tdmpMA/LlKO//Ok7KPQCovUIlQftcE304xGFVT +Rlf2cdaXW+AtGV0npdPXtj1BtseEI0R0CYUTmQQWAK9lz4y6eBRgAGWS+iPzpMuY +L8UxXp9Z3FCyzJ2FL6yx8kUtpMNoQXPlr9OvjwIDAQABAoIBAFcIFNs8OhmaDQJo +NlWcljx24Z9dRspPEYgmNONH8qx/thPk1Wk034HBxLhDA7trQSyB7OHhnC9bZ/ya +Bojrfj6uMy16NVrT1rQcyZZIo0PfolDTyAanWYgghWHl0ZnadFRmJA/0vhg5/zpe +q3Z6IvgHc33/LEaeQAeyFqvGfkbSMZz2cj9na9MgW5usMHrQxtBdtuwVrtj4dKY+ +SXhQz7G5gaq5byromeE7U0fhPwGVqHy/QvHJbIQhowzu2cCFAQaBOMcgy8hqKVB3 +dZlcRkFU1/iS0MsLmsv7rRAt/r43zW0dvFqZ7WzN9McQGF7Og4CN/GNGul0Q1bIu +NcKdJLkCgYEA4RXEGLzR1gTolYXImRdXmeTU7XqoXt/CNtg5dumqUYRDD1WmOtp5 +XfEZdcEHTCfPQWIXsC8dM6+MFujHcnZV+NPx7xPe/pKJ4adAe+yHH1gsj4elvl7z +shcgT3/0fsj3dGFnsxBww1djIBH+gf5Niz44+QaqDlDNEkYBXdBmB6sCgYEA24Kr +fYaU7qP+SPamVC6p8NU6nddmuJl+n5XBmnDwbYaM6OyCEetCH3LQHYSkxjtJ3q/O +iSezxZzcBReP1MbZZbn2oqo8w/nE/LKrJytClLyDoJYaF5WigInaZ/D3QGLFH4J+ +kjYrjTuJGXq5LJjJ1hsxIowi+CQcAr67wSrcg60CgYEA2VVa80felPhIW5fCCZAw +VbhOoL8+s9z6elptohQdEHjVB4l76HfrmHmkS78GfNIznL5KgSP83lsyuSwq6Kq6 +eHitsltNhiGYYPpNmVrZXbqVzED+GMM2K0+JMzopqgICba1fo9bMCtHmNKErTflu +hnSeLlXw/cGnQW23BA6ldeECgYEA0NsfeCvZAMagZ6Pm1iogH7mCMDSG1BWX2ReQ +QfY7jLp80BJYH9yL6YhAZBWVAdffjTYReYaBEgERhvbIL1eT+apa9KKtdnnr59PH +7VjH3OURCHZJFS+Wkl6XpFYtquFPVY/ABjXsclC3Pbr6/WfSgxkUQx67FwakcCgy +VLUHY3ECgYEAnCZybgd3rpZwqSdljHne4xvvDFRwRev4JKAkXhXehQa8Yeb/vEBp +9unBdzWR8EbE/QmyiUAKKaqFVHtsneGCwtzB08tJeb9QXZ09rtf5dRAMUbQW/gHg +Bj3Uz0ZzisnXqy6JTXQzaCveVQlLzsmVsCoe5nA3yrkOam3BG3i16KI= +-----END RSA PRIVATE KEY----- diff --git a/test/secrets/test.self-signed.password b/test/secrets/test.self-signed.password new file mode 100644 index 0000000..143be9a --- /dev/null +++ b/test/secrets/test.self-signed.password @@ -0,0 +1 @@ +vesoft diff --git a/test/secrets/test.self-signed.pem b/test/secrets/test.self-signed.pem new file mode 100644 index 0000000..85eb39f --- /dev/null +++ b/test/secrets/test.self-signed.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIIEGzCCAwOgAwIBAgIUDcmZFpL4PcdCXfLRBK8bR2vb39cwDQYJKoZIhvcNAQEL +BQAwgZwxCzAJBgNVBAYTAkNOMREwDwYDVQQIDAhaaGVqaWFuZzERMA8GA1UEBwwI +SGFuZ3pob3UxFDASBgNVBAoMC1Zlc29mdCBJbmMuMRAwDgYDVQQLDAdzZWN0aW9u +MRYwFAYDVQQDDA1zaHlsb2NrIGh1YW5nMScwJQYJKoZIhvcNAQkBFhhzaHlsb2Nr +Lmh1YW5nQHZlc29mdC5jb20wHhcNMjEwODE5MDkyNDQ3WhcNMjUwODE4MDkyNDQ3 +WjCBnDELMAkGA1UEBhMCQ04xETAPBgNVBAgMCFpoZWppYW5nMREwDwYDVQQHDAhI +YW5nemhvdTEUMBIGA1UECgwLVmVzb2Z0IEluYy4xEDAOBgNVBAsMB3NlY3Rpb24x +FjAUBgNVBAMMDXNoeWxvY2sgaHVhbmcxJzAlBgkqhkiG9w0BCQEWGHNoeWxvY2su +aHVhbmdAdmVzb2Z0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AMEAgpamCQHl+8JnUHI6/VmJHjDLYJLTliN/CwpFrhMqIVjJ8wG57WYLpXpn91Lz +eHu52LkVzcikybIJ2a+LOTvnhNFdbmTbqDtrb+s6wM/sO+nF6tU2Av4e5zhyKoeR +LL+rHMk3nymohbdN4djySFmOOU5A1O/4b0bZz4Ylu995kUawdiaEo13BzxxOC7Ik +Gge5RyDcm0uLXZqTAPy5Sjv/zpOyj0AqL1CJUH7XBN9OMRhVU0ZX9nHWl1vgLRld +J6XT17Y9QbbHhCNEdAmFE5kEFgCvZc+MungUYABlkvoj86TLmC/FMV6fWdxQssyd +hS+ssfJFLaTDaEFz5a/Tr48CAwEAAaNTMFEwHQYDVR0OBBYEFK0GVrQx+wX1GCHy +e+6fl4X+prmYMB8GA1UdIwQYMBaAFK0GVrQx+wX1GCHye+6fl4X+prmYMA8GA1Ud +EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAHqP8P+ZUHmngviHLSSN1ln5 +Mx4BCkVeFRUaFx0yFXytV/iLXcG2HpFg3A9rAFoYgCDwi1xpsERnBZ/ShTv/eFOc +IxBY5yggx3/lGi8tAgvUdarhd7mQO67UJ0V4YU3hAkbnZ8grHHXj+4hfgUpY4ok6 +yaed6HXwknBb9W8N1jZI8ginhkhjaeRCHdMiF+fBvNCtmeR1bCml1Uz7ailrpcaT +Mf84+5VYuFEnaRZYWFNsWNCOBlJ/6/b3V10vMXzMmYHqz3xgAq0M3fVTFTzopnAX +DLSzorL/dYVdqEDCQi5XI9YAlgWN4VeGzJI+glkLOCNzHxRNP6Qev+YI+7Uxz6I= +-----END CERTIFICATE-----