今天在學習gRPC的安全通信時,需要創建SSL自簽名證書,以往是在linux 虛擬機中創建,現在學習了docker,我嘗試在docker上創建證書也非常方便。
1,啟動 frapsoft/openssl 鏡像
docker run -it --entrypoint /bin/ash frapsoft/openssl
2,創建一個私鑰
openssl genrsa -out server.key 2048
3,根據私鑰生成csr
openssl req -new -sha256 -key server.key -out server.csr
執行上面的命令后,需要完成一些信息的填寫,主要有:
Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
填寫完這些信息后,就會生成一個證書簽名請求(server.csr
)
4,生成證書
如果想使用一個SSL證書來對通信進行加密,但是不需要使用CA簽字的證書,那么我們可以生成一個自簽名的證書。
使用前面生成的私鑰(server.key
)以及證書簽名請求(server.csr
),我們可以生成一個自簽名的證書:
openssl x509 -req -sha256 -in server.csr -signkey server.key -out server.crt -days 3650
選項-x509
指定req
來生成一個自簽名的證書。-days 3650
指定了證書的有效期是3650天。-signkey
指定了私鑰,而-in
指定了證書簽名請求。
這樣,就能生成一個自簽名的證書(server.crt
)。
5,將證書復制到宿主機
0) 將證書以及私鑰,證書簽名請求文件(server.key,server.csr,server.crt)放到一個文件夾
mkdir certificate mv server* /certificate/
1) 新開一個cmd窗口,執行 docker ps 命令查看容器id,例如:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6db71863976 frapsoft/openssl "/bin/ash" 32 minutes ago Up 32 minutes angry_spence
2)使用docker cp 命令,將文件夾復制到宿主機當前目錄
docker cp a6db71863976:/certificate %cd%