今天在学习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
如果想从一个认证中心(Certificate Authority,CA)获取一个SSL证书,我们需要生成一个证书签名请求(Certificate Signing Reqeusts,CRSs)。一个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%