服务端代码

package main

import (
"crypto/tls"
"crypto/x509"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"grpcpro/services"
"io/ioutil"
"net"
) func main() {
cert,_:=tls.LoadX509KeyPair("cert/server.pem","cert/server.key")
certPool := x509.NewCertPool()
ca, _ := ioutil.ReadFile("cert/ca.pem")
certPool.AppendCertsFromPEM(ca) creds:=credentials.NewTLS(&tls.Config{
Certificates: []tls.Certificate{cert},//服务端证书
ClientAuth: tls.RequireAndVerifyClientCert,
ClientCAs: certPool,
}) rpcServer:=grpc.NewServer(grpc.Creds(creds))
services.RegisterProdServiceServer(rpcServer,new(services.ProdService))
lis,_:=net.Listen("tcp",":8081")
rpcServer.Serve(lis) //以下注释为grpc提供http服务代码
//mux:=http.NewServeMux()
//mux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
// rpcServer.ServeHTTP(writer,request)
//})
//httpServer:=&http.Server{
// Addr:":8081",
// Handler:mux,
//}
//httpServer.ListenAndServeTLS("keys/server.crt","keys/server.key") }

客户端代码

package main

import (
"context"
"crypto/tls"
"crypto/x509"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"grpccli/services"
"io/ioutil"
"log"
) func main(){
//creds, err := credentials.NewClientTLSFromFile("keys/server.crt", "localhost")
//if err != nil {
// log.Fatal(err)
//} cert,_:=tls.LoadX509KeyPair("cert/client.pem","cert/client.key")
certPool := x509.NewCertPool()
ca, _ := ioutil.ReadFile("cert/ca.pem")
certPool.AppendCertsFromPEM(ca) creds:=credentials.NewTLS(&tls.Config{
Certificates: []tls.Certificate{cert},//客户端证书
ServerName: "localhost",
RootCAs: certPool,
}) conn,err:=grpc.Dial(":8081",grpc.WithTransportCredentials(creds))
if err!=nil{
log.Fatal(err)
}
defer conn.Close() prodClient:=services.NewProdServiceClient(conn)
prodRes,err:=prodClient.GetProdStock(context.Background(),
&services.ProdRequest{ProdId:12})
if err!=nil{
log.Fatal(err)
}
fmt.Println(prodRes.ProdStock)
}

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

使用自签CA,Server,client证书和双向认证的更多相关文章

  1. SSL使用windows证书库中证书实现双向认证

    前一段时间对OpenSSL库中的SSL通讯稍微琢磨了一下,在百度文库中找了个示例程序,然后在机器上跑,哇塞,运行成功!那时那个惊喜啊,SSL蛮简单的嘛.前几天,老板要我整一个SSL通讯,要使用wind ...

  2. Https:创建部署SSL证书进行双向认证

    一.前言 建立客户端与服务器的Https的连接需要证书进行双向验证后,才可访问.   二.证书类型 不同数字证书部署在服务器上后,用户浏览器访问网站时,展示如下: 1.无证书时 显示不安全标识. 2. ...

  3. 什么是SSL双向认证,与单向认证证书有什么区别?

    SSL/TLS证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书.服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书.但是, ...

  4. nginx反向代理cas-server之2:生成证书,centOS下使用openssl生成CA证书(根证书、server证书、client证书)

    前些天搭好了cas系统,这几天一致再搞nginx和cas的反向代理,一直不成功,但是走http还是测试通过的,最终确定是ssl认证证书这一块的问题,原本我在cas服务端里的tomcat已经配置了证书, ...

  5. 【HTTPS】自签CA证书 && nginx配置https服务

    首先,搭建https服务肯定需要一个https证书.这个证书可以看做是一个应用层面的证书.之所以这么说是因为https证书是基于CA证书生成的.对于正式的网站,CA证书需要到有资质的第三方证书颁发机构 ...

  6. 自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名【转】

    自签名的证书无法被吊销,CA签名的证书可以被吊销 能不能吊销证书的区别在于,如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户进行通信   如果你的规划需要创建多个证书,那么使用私有 ...

  7. openSSL命令、PKI、CA、SSL证书原理

    相关学习资料 http://baike.baidu.com/view/7615.htm?fr=aladdin http://www.ibm.com/developerworks/cn/security ...

  8. https学习笔记三----OpenSSL生成root CA及签发证书

    在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...

  9. OpenSSL生成root CA及签发证书

    一.openssl 简介 openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用.健壮.功能完备的工具套件,用以支持SSL/TLS 协议的实现.官网:https://www.openss ...

随机推荐

  1. flask框架(六)——闪现(get_flashed_message)、请求扩展、中间件(了解)

    message -设置:flash('aaa') -取值:get_flashed_message() -假设在a页面操作出错,跳转到b页面,在b页面显示a页面的错误信息 1 如果要用flash就必须设 ...

  2. STL对map排序

    // sort start typedef struct{ ... }Node; // Map的键是字符串,值是结构体.虽然有自动排序特性,但是按字符串的排序并不能符合要求.此时,Map的key可以视 ...

  3. Go语言变量的初始化

    正如上一节<Go语言变量声明>中提到的 Go语言在声明变量时,自动对变量对应的内存区域进行初始化操作.每个变量会初始化其类型的默认值,例如: 整型和浮点型变量的默认值为 0. 字符串变量的 ...

  4. Xinetd服务的安装与配置详解

    1.什么是xinetd xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器.经常用来管理多种轻量级Interne ...

  5. gitlab用户登录与AD域用户集成

    ---恢复内容开始--- 编辑gitlab.rb文件 sudo vi /etc/gitlab/gitlab.rb 下图是我编辑的内容示例(仅供参考): 编辑以下内容: gitlab_rails['ld ...

  6. 配置APP的图标

    https://www.cnblogs.com/hupo376787/p/10290840.html 上一篇文章说到  Flutter - 自动生成Android & iOS图标 通过flut ...

  7. kubernetes第三章--创建harbor私有镜像库

  8. 设置body样式问题

    如果我给body设置成一个宽高为200px的正方形,背景为红色,但是整个html也变成了红色,而且是整个浏览器屏幕都是红的,怎么来处理,如下 给html单独设置一个背景颜色,比如为白色#fff,在给b ...

  9. MySQL中使用函数时,与后面括号不能之间不能根空格

    修改前代码: select MAX (article_order) from mall_school_article where 1=1 and is_deleted = 0 and status = ...

  10. 安装folly库以及folly的ConcurrentHashMap的简单使用

    我在写grpc的实例时, 需要使用一个多线程的hash map, C++标准库中没有多线程的hash map, facebook开源的folly中存在大量的基础类, 中间存在一个高性能的hash ma ...