github.com/ztalab/ZACA@v0.0.1/pkg/caclient/examples/client/client.go (about)

     1  package main
     2  
     3  import (
     4  	"crypto/tls"
     5  	"flag"
     6  	"fmt"
     7  	"github.com/pkg/errors"
     8  	"github.com/ztalab/ZACA/pkg/caclient"
     9  	"github.com/ztalab/ZACA/pkg/logger"
    10  	"github.com/ztalab/ZACA/pkg/spiffe"
    11  	"go.uber.org/zap/zapcore"
    12  	"io/ioutil"
    13  	"net/http"
    14  	"time"
    15  )
    16  
    17  var (
    18  	caAddr     = flag.String("ca", "https://127.0.0.1:8081", "CA Server")
    19  	ocspAddr   = flag.String("ocsp", "http://127.0.0.1:8082", "Ocsp Server")
    20  	serverAddr = flag.String("server", "https://127.0.0.1:6066", "")
    21  	authKey    = "0739a645a7d6601d9d45f6b237c4edeadad904f2fce53625dfdd541ec4fc8134"
    22  )
    23  
    24  func init() {
    25  	logger.GlobalConfig(logger.Conf{
    26  		Debug: true,
    27  		Level: zapcore.DebugLevel,
    28  	})
    29  }
    30  
    31  func main() {
    32  	flag.Parse()
    33  	client, err := NewMTLSClient()
    34  	if err != nil {
    35  		logger.Fatalf("Client init error: %v", err)
    36  	}
    37  	ticker := time.Tick(time.Second)
    38  	for i := 0; i < 1000; i++ {
    39  		<-ticker
    40  
    41  		resp, err := client.Get(*serverAddr)
    42  		if err != nil {
    43  			logger.With("resp", resp).Error(err)
    44  			continue
    45  		}
    46  		body, _ := ioutil.ReadAll(resp.Body)
    47  		logger.Infof("Request result: %v, %s", resp.StatusCode, body)
    48  	}
    49  }
    50  
    51  // mTLS Client Use example
    52  func NewMTLSClient() (*http.Client, error) {
    53  	l, _ := logger.NewZapLogger(&logger.Conf{
    54  		// Level: 2,
    55  		Level: -1,
    56  	})
    57  	c := caclient.NewCAI(
    58  		caclient.WithCAServer(caclient.RoleDefault, *caAddr),
    59  		caclient.WithAuthKey(authKey),
    60  		caclient.WithOcspAddr(*ocspAddr),
    61  		caclient.WithLogger(l),
    62  	)
    63  	ex, err := c.NewExchanger(&spiffe.IDGIdentity{
    64  		SiteID:    "test_site",
    65  		ClusterID: "cluster_test",
    66  		UniqueID:  "client1",
    67  	})
    68  	if err != nil {
    69  		return nil, errors.Wrap(err, "Exchanger initialization failed")
    70  	}
    71  	cfger, err := ex.ClientTLSConfig("supreme")
    72  	if err != nil {
    73  		panic(err)
    74  	}
    75  	cfger.BindExtraValidator(func(identity *spiffe.IDGIdentity) error {
    76  		fmt.Println("id: ", identity.String())
    77  		return nil
    78  	})
    79  	tlsCfg := cfger.TLSConfig()
    80  	//tlsCfg.VerifyConnection = func(state tls.ConnectionState) error {
    81  	//	cert := state.PeerCertificates[0]
    82  	//	fmt.Println("Server certificate generation time: ", cert.NotBefore.String())
    83  	//	return nil
    84  	//}
    85  	client := httpClient(tlsCfg)
    86  	go ex.RotateController().Run()
    87  	// util.ExtractCertFromExchanger(ex)
    88  
    89  	resp, err := client.Get("http://www.baidu.com")
    90  	if err != nil {
    91  		panic(err)
    92  	}
    93  
    94  	fmt.Println("baidu test: ", resp.StatusCode)
    95  
    96  	return client, nil
    97  }
    98  
    99  func httpClient(cfg *tls.Config) *http.Client {
   100  	client := http.Client{
   101  		Transport: &http.Transport{
   102  			TLSClientConfig:   cfg,
   103  			DisableKeepAlives: true,
   104  		},
   105  	}
   106  	return &client
   107  }