Adds client example

This commit is contained in:
Chris Van de Gejuchte 2017-09-12 12:24:16 +02:00
parent 2611d6ddf2
commit 32df8406c1
2 changed files with 144 additions and 1 deletions

View File

@ -1,4 +1,4 @@
# This is a fork of github.com/tidwall/redcon that adds TLS support # This is a fork of <a href="github.com/tidwall/redcon">github.com/tidwall/redcon</a> that adds TLS support
<p align="center"> <p align="center">
<img <img
@ -252,6 +252,83 @@ func main() {
} }
``` ```
As a TLS client, [Redigo](https://github.com/garyburd/redigo) can be used.
Run the client example in a new terminal window:
```sh
go run example/tlsclient.go
```
```go
package main
import (
"crypto/tls"
"crypto/x509"
"fmt"
"log"
"github.com/garyburd/redigo/redis"
)
const rootCert = `-----BEGIN CERTIFICATE-----
MIIB+TCCAZ+gAwIBAgIJAL05LKXo6PrrMAoGCCqGSM49BAMCMFkxCzAJBgNVBAYT
AkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRn
aXRzIFB0eSBMdGQxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xNTEyMDgxNDAxMTNa
Fw0yNTEyMDUxNDAxMTNaMFkxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0
YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMM
CWxvY2FsaG9zdDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHGaaHVod0hLOR4d
66xIrtS2TmEmjSFjt+DIEcb6sM9RTKS8TZcdBnEqq8YT7m2sKbV+TEq9Nn7d9pHz
pWG2heWjUDBOMB0GA1UdDgQWBBR0fqrecDJ44D/fiYJiOeBzfoqEijAfBgNVHSME
GDAWgBR0fqrecDJ44D/fiYJiOeBzfoqEijAMBgNVHRMEBTADAQH/MAoGCCqGSM49
BAMCA0gAMEUCIEKzVMF3JqjQjuM2rX7Rx8hancI5KJhwfeKu1xbyR7XaAiEA2UT7
1xOP035EcraRmWPe7tO0LpXgMxlh2VItpc2uc2w=
-----END CERTIFICATE-----
`
var addr = ":6380"
func main() {
roots := x509.NewCertPool()
ok := roots.AppendCertsFromPEM([]byte(rootCert))
if !ok {
log.Fatal("failed to parse root certificate")
}
config := &tls.Config{RootCAs: roots, ServerName: "localhost"}
dialOptions := redis.DialTLSConfig(config)
conn, err := redis.Dial("tcp", addr, dialOptions)
if err != nil {
log.Fatal(err)
}
defer conn.Close()
reply, err := conn.Do("PING")
if err != nil {
log.Fatal(err)
}
fmt.Println(reply)
// Output: PONG
reply, err = conn.Do("SET", "key", "hello world")
if err != nil {
log.Fatal(err)
}
fmt.Println(reply)
// Output: OK
reply, err = conn.Do("GET", "key")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(reply.([]byte)))
// Output: hello world
}
```
Benchmarks Benchmarks
---------- ----------

66
example/tlsclient.go Normal file
View File

@ -0,0 +1,66 @@
package main
import (
"crypto/tls"
"crypto/x509"
"fmt"
"log"
"github.com/garyburd/redigo/redis"
)
const rootCert = `-----BEGIN CERTIFICATE-----
MIIB+TCCAZ+gAwIBAgIJAL05LKXo6PrrMAoGCCqGSM49BAMCMFkxCzAJBgNVBAYT
AkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRn
aXRzIFB0eSBMdGQxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xNTEyMDgxNDAxMTNa
Fw0yNTEyMDUxNDAxMTNaMFkxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0
YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMM
CWxvY2FsaG9zdDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHGaaHVod0hLOR4d
66xIrtS2TmEmjSFjt+DIEcb6sM9RTKS8TZcdBnEqq8YT7m2sKbV+TEq9Nn7d9pHz
pWG2heWjUDBOMB0GA1UdDgQWBBR0fqrecDJ44D/fiYJiOeBzfoqEijAfBgNVHSME
GDAWgBR0fqrecDJ44D/fiYJiOeBzfoqEijAMBgNVHRMEBTADAQH/MAoGCCqGSM49
BAMCA0gAMEUCIEKzVMF3JqjQjuM2rX7Rx8hancI5KJhwfeKu1xbyR7XaAiEA2UT7
1xOP035EcraRmWPe7tO0LpXgMxlh2VItpc2uc2w=
-----END CERTIFICATE-----
`
var addr = ":6380"
func main() {
roots := x509.NewCertPool()
ok := roots.AppendCertsFromPEM([]byte(rootCert))
if !ok {
log.Fatal("failed to parse root certificate")
}
config := &tls.Config{RootCAs: roots, ServerName: "localhost"}
dialOptions := redis.DialTLSConfig(config)
conn, err := redis.Dial("tcp", addr, dialOptions)
if err != nil {
log.Fatal(err)
}
defer conn.Close()
reply, err := conn.Do("PING")
if err != nil {
log.Fatal(err)
}
fmt.Println(reply)
// Output: PONG
reply, err = conn.Do("SET", "key", "hello world")
if err != nil {
log.Fatal(err)
}
fmt.Println(reply)
// Output: OK
reply, err = conn.Do("GET", "key")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(reply.([]byte)))
// Output: hello world
}