gRpc 相關

CA證書自簽單向驗證Openssl命令

//openssl 下載
//https://slproweb.com/products/Win32OpenSSL.html

openssl
//生成key
genrsa -des3 -out server.key 2048 //需要輸入密碼
req -new -key server.key -out server.csr    //common name填寫域名,不正確填寫會被報警告
//去密碼
rsa -in server.key -out server_no_passwd.key
//生成證書
x509 -req -days 365 -in server.csr -signkey server_no_passwd.key -out server.crt

// export  1. server_no_passwd.key 2. server.crt

應用

//服務器
cred, err := credentials.NewServerTLSFromFile("keys/server.crt", "keys/server.key")
grpc.NewServer(grpc.Creds(cred))

//客戶端
cred, err := credentials.NewClientTLSFromFile("keys/server.crt", "localhost")   //參數(shù)二等同 common name
grpc.Dial(":8888",grpc.WithTransportCredentials(cred))

grpc server_http

//s.Serve(conn)
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
s.ServeHTTP(w, r)
})

http.ListenAndServeTLS(":8888","keys/server.crt", "keys/server.key",nil)

CA證書自簽雙向驗證Openssl命令

//使用CA證書
genrsa -out ca.key 2048
req -new -x509 -days 3650 -key ca.key -out ca.pem
//生成服務器證書
genrsa -out server.key 2048
req -new -key server.key -out server.csr
x509 -req -sha256 -CA ca.pem -CAkey ca.key -CAcreateserial -days 3650 -in server.csr -out server.pem
//生成客戶端
ecparam -genkey -name secp384r1 -out client.key
req -new -key client.key -out client.csr
x509 -req -sha256 -CA ca.pem -CAkey ca.key -CAcreateserial -days 3650 -in client.csr -out client.pem

應用

//服務器 (不能使用serveHttp)
cert, _ := tls.LoadX509KeyPair("cert/server.pem", "cert/server.key")
certPool := x509.NewCertPool()
ca, _ := ioutil.ReadFile("cert/ca.pem")

certPool.AppendCertsFromPEM(ca)

cred := credentials.NewTLS(&tls.Config{
Certificates: []tls.Certificate{cert},
ClientAuth:   tls.RequireAndVerifyClientCert,
ClientCAs:    certPool,
})

//客戶端
cert, _ := tls.LoadX509KeyPair("cert/client.pem", "cert/client.key")
certPool := x509.NewCertPool()
ca, _ := ioutil.ReadFile("cert/ca.pem")

certPool.AppendCertsFromPEM(ca)

cred := credentials.NewTLS(&tls.Config{
Certificates: []tls.Certificate{cert},
ServerName:   "localhost",
RootCAs:      certPool,
})

grpc-gateway使用

//安裝
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway

go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger

go get -u github.com/golang/protobuf/protoc-gen-go

//proto file修改 例如
syntax = "proto3";

package services;

import "google/api/annotations.proto";

message Request{
  string name = 1;
}


message Response {
  string msg = 1;
}

service Greeter{
  rpc Hello(Request) returns (Response){
    option (google.api.http) = {
      get: "/v1/greeter/{name}"
    };
  }
}



//** 可以將引入的proto文件拷貝到編寫的proto目錄中颜武,這樣可以在生成時節(jié)省編寫包含目錄

//文件生成

protoc --go_out=plugins=grpc:. *.proto

protoc --grpc-gateway_out=logtostderr=true:. *.proto

//http 網(wǎng)關服務器編寫 
//(GetClientCreds 為上述客戶端Creds生成代碼封裝)
//localhost:8888 為grpc服務器綁定地址
//8081為網(wǎng)關服務器綁定端口

gwmux := runtime.NewServeMux()
opts := []grpc.DialOption{grpc.WithTransportCredentials(GetClientCreds())}
services.RegisterGreeterHandlerFromEndpoint(context.Background(),gwmux,"localhost:8888",opts)

httpServer := http.Server{
    Addr:    ":8081",
    Handler: gwmux,
}
fmt.Println(httpServer.ListenAndServe())

//測試 使用瀏覽器訪問
localhost:8081/v1/greeter/jack

gRpc字段驗證

//下載
github.com/envoyproxy/protoc-gen-validate

//修改proto文件
import "validate.proto";
message People{
  string name = 1;
  int32 age = 2[(validate.rules).int32.gt = 18];
}
//生成
protoc --go_out=plugins=grpc:. --validate_out=lang=go:. *.proto

//驗證代碼
err := req.People.Validate()
//...
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市橘原,隨后出現(xiàn)的幾起案子趾断,更是在濱河造成了極大的恐慌芋酌,老刑警劉巖脐帝,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炸站,死亡現(xiàn)場離奇詭異旱易,居然都是意外死亡腿堤,警方通過查閱死者的電腦和手機忌堂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門士修,熙熙樓的掌柜王于貴愁眉苦臉地迎上來李命,“玉大人封字,你說我怎么就攤上這事阔籽“手疲” “怎么了在辆?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寇窑。 經(jīng)常有香客問我窗市,道長,這世上最難降的妖魔是什么论熙? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮二蓝,結果婚禮上刊愚,老公的妹妹穿的比我還像新娘鸥诽。我一直安慰自己牡借,他們只是感情好钠龙,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著上真,像睡著了一般睡互。 火紅的嫁衣襯著肌膚如雪就珠。 梳的紋絲不亂的頭發(fā)上嗓违,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天冕广,我揣著相機與錄音,去河邊找鬼沟优。 笑死挠阁,一個胖子當著我的面吹牛侵俗,可吹牛的內(nèi)容都是我干的隘谣。 我是一名探鬼主播寻歧,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼澄耍!你這毒婦竟也來了逾苫?” 一聲冷哼從身側響起铅搓,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤多望,失蹤者是張志新(化名)和其女友劉穎怀偷,沒想到半個月后椎工,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體维蒙,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡殖熟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年菱属,在試婚紗的時候發(fā)現(xiàn)自己被綠了纽门。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膜毁。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡候醒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伙菊,到底是詐尸還是另有隱情镜硕,我是刑警寧澤返干,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布财剖,位于F島的核電站躺坟,受9級特大地震影響乳蓄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜产舞,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赠叼。 院中可真熱鬧嘴办,春花似錦、人聲如沸贯被。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搏熄,卻和暖如春暇赤,著一層夾襖步出監(jiān)牢的瞬間鞋囊,已是汗流浹背溜腐。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工古戴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留矩肩,地道東北人肃续。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓始锚,卻偏偏與公主長得像瞧捌,于是被迫代替她去往敵國和親姐呐。 傳聞我的和親對象是個殘疾皇子曙砂,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • CA和證書安全協(xié)議(SSL/TLS)OpenSSH 一、CA和證書 (一) PKI(Public Key Infr...
    哈嘍別樣閱讀 1,394評論 0 0
  • 超文本傳輸安全協(xié)議(HTTPS笑陈,常稱為 HTTP over TLS/SSL)是一種通過計算機網(wǎng)絡進行安全通信的傳輸...
    MarchCd閱讀 7,177評論 1 22
  • HTTPS介紹 超文本傳輸安全協(xié)議(英語:Hypertext Transfer Protocol Secure,縮...
    齊滇大圣閱讀 8,930評論 8 96
  • (目前有點亂块请,先貼上來,等以后有時間在整理吧贸弥。這個問題一直想拿出來分享绵疲,還有兩個博客臣疑,都是相關的讯沈,一點點發(fā)出來) ...
    kamiSDY閱讀 4,376評論 0 2
  • 不完全定義的類或特質(zhì)的成員為抽象成員问慎。抽象成員將被聲明類的子類實現(xiàn)。四種抽象成員:val冰木、var踊沸、方法及類型 抽象...
    BigBigFlower閱讀 163評論 0 0