go-grpc-2加入证书验证

安装openssl

如果系统有就不用安装了
下载http://slproweb.com/products/Win32OpenSSL.html
在这里插入图片描述
下载后双击安装

openssl version -a # 查看openssl版本信息

在这里插入图片描述

在这里插入图片描述

openssl
genrsa -des3 -out server.key 2048 # 回车后输入4位数字的密码,这里输入的1234

在这里插入图片描述
此时当前文件夹下就生成了私钥文件server.key
继续键入

req -new -key server.key -out server.csr # 回车后输入刚才的密码1234

输入国家cn
Common Name填 nan.com
email等不想填写的直接回车,此时就生成了server.csr

 rsa -in server.key -out server_no_passwd.key # 输入刚才的密码1234
 x509 -req -days 365 -in server.csr -signkey server_no_passwd.key -out server.crt # 此时就生成了server.crt

生成SAN证书,参考:https://www.cnblogs.com/jackluo/p/13841286.html
https://blog.csdn.net/u010950854/article/details/105667819/

随便找一个地方创建配置文件 example.com.conf

# example.com.conf
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
# 生成v3版本带扩展属性的证书
req_extensions = v3_req

# 设置默认域名
[ req_distinguished_name ]
# Minimum of 4 bytes are needed for common name
commonName         = www.example.com
commonName_default = *.example.com
commonName_max     = 64

# 设置两位国家代码
# ISO2 country code only
countryName         = China
countryName_default = CN

# 设置州 或者 省的名字
# State is optional, no minimum limit
stateOrProvinceName         = Province
stateOrProvinceName_default = Beijing

# 设置城市的名字
# City is required
localityName         = City
localityName_default = Beijing

# 设置公司或组织机构名称
# Organization is optional
organizationName         = Organization
organizationName_default = My Company

# 设置部门名称
# Organization Unit is optional
organizationalUnitName         = Department
organizationalUnitName_default = My Department

# 设置联系邮箱
# Email is optional
emailAddress         = Email
emailAddress_default = email@example.com

# 拓展信息配置
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

# 要配置的域名
[alt_names]
DNS.1 = www.example.com
DNS.2 = *.example.com

创建私钥生成证书

openssl 
genrsa -out example.com.key 2048  # 创建私钥
req -new -nodes -out example.com.csr -key example.com.key -config  example.com.conf  # 生成csr
x509 -req -days 3650 -in example.com.csr -signkey example.com.key -out example.com.cert -extensions v3_req -extfile example.com.conf  # 创建证书
x509 -text -noout -in example.com.cert # 查看证书信息

# 私钥/CSR/证书匹配校验,可以看到下面3条打印结果一样
x509 -noout -modulus -in example.com.cert
rsa -noout -modulus -in example.com.key
req -noout -modulus -in  example.com.csr  # 这一行执行校验,如果出现problem creating object tsa_policy1=1.2.3.4.1,则关闭当前窗口,再开个cmd 从创建私钥的下面req -new ...开始再执行一遍就可以了

把上面生成的证书和密钥放到grpc服务端的文件夹里
在这里插入图片描述
把生成的证书放到grpc客户端的文件夹里
在这里插入图片描述

在这里插入图片描述

package main

import (
	"fmt"
	"log"
	"net/http"
	"test/services"

	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials"
)

func main() {
	creds, err := credentials.NewServerTLSFromFile("keys/example.com.cert", "keys/example.com.key")
	if err != nil {
		log.Fatal(err)
	}

	rpcServer := grpc.NewServer(grpc.Creds(creds))
	services.RegisterProductServiceServer(rpcServer, new(services.ProductService))

	// 方式一:tcp
	// lis, _ := net.Listen("tcp", ":8081")
	// rpcServer.Serve(lis)

	// 方式二:Http
	mux := http.NewServeMux()
	mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Println("Proto: ", r.Proto) // 使用协议
		fmt.Println("Header:", r.Header)
		fmt.Println("request:", r)
		rpcServer.ServeHTTP(w, r)
	})
	httpServer := &http.Server{
		Addr:    ":8081",
		Handler: mux,
	}
	// httpServer.ListenAndServe() // 无证书方式 // http://localhost:8081/
	httpServer.ListenAndServeTLS("keys/example.com.cert", "keys/example.com.key") // 证书验证 // https://localhost:8081/
}

回答: 错误提示中提到了一个未知的标志"--go-grpc",这可能是因为你的命令中使用了错误的标志。正确的命令应该是"protoc --go-grpc_out=. --go-grpc_opt=paths=source_relative user.proto"。请注意,标志"--go-grpc_out"和"--go-grpc_opt"之间应该有一个下划线"_",而不是一个空格。另外,你还需要确保你已经安装了正确的go协议编译器插件。你可以使用以下命令重新安装插件:"$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest"和"$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest"。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [使用protoc编译grpc问题记录(--go_out: protoc-gen-go: plugins are not supported;)](https://blog.csdn.net/m0_57777971/article/details/127864341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [protoc-gen-go: plugin are not supported;use ‘protoc --go-grpc_out=...‘ to generate gRPC 的问题](https://blog.csdn.net/weixin_42875684/article/details/125652895)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值