我正在尝试为安全的grpc通信生成一个自签名证书。下面是我所尝试的,服务之间的连接在localhost中完美地工作。
然而,当我将其中一个服务部署到生产(Google Cloud Run)时,连接停止工作。我如何使证书支持连接,无论是在本地主机还是在生产中。
下面是我尝试过的证书生成脚本。
生成器.sh
# Clean Up
rm *.crt
echo "Generating certificates ..."
openssl genrsa -passout pass:1111 -des3 -out ca.key 4096
openssl req -passin pass:1111 -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=Santiago/O=Test/OU=Test/CN=ca"
openssl genrsa -passout pass:1111 -des3 -out server.key 4096
openssl req -passin pass:1111 -new -key server.key -out server.csr -subj "/C=CL/ST=RM/L=Santiago/O=Test/OU=Server/CN=localhost"
openssl x509 -req -passin pass:1111 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
openssl rsa -passin pass:1111 -in server.key -out server.key
openssl genrsa -passout pass:1111 -des3 -out client.key 4096
openssl req -passin pass:1111 -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=Santiago/O=Test/OU=Client/CN=localhost"
openssl x509 -passin pass:1111 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
openssl rsa -passin pass:1111 -in client.key -out client.key
我如何才能使服务之间的连接工作的所有时间,无论是在本地主机或在生产,在我自己的情况下是谷歌云运行(*.run.app
)?
- 谢谢-谢谢
1条答案
按热度按时间ymdaylpp1#
您的标题显示“证书中有多个通用名称”,但您的正文实际上显示(两次)“同时适用于本地主机和其他主机 * X.509证书结构非常灵活,从技术上讲,可以创建一个在Subject中具有多个CommonName属性的证书,但如果用于SSL/TLS(包括HTTPS),则在确定证书有效性时实际上仅考虑其中之一;参见RFC 2818和RFC 6125。
有两种方法可以让一个证书用于多个服务器名称,实际上可以是一个服务器的多个名称(常见于虚拟主机)或不同的服务器(您的情况):
*.run.app
),则可以使用一个包含该通配符的CommonName。如果您的“localhost”实际上是您自己的计算机或VM,您可以使用/etc/hosts或本地DNS(如dnsmasq)或未绑定到 * 分配 * 它一个与此模式匹配名称(如myownmachine.run.app
),这将与此证书一起工作。Add SAN with private CA
Requested Extensions in CSR not being reflected in CRT
Self signed SSL certificate: Subject Alternative Name (SAN) gets lost when signing
https://security.stackexchange.com/questions/204036/specify-subject-alt-names-in-openssl
https://security.stackexchange.com/questions/190905/subject-alternative-name-in-certificate-signing-request-
https://security.stackexchange.com/questions/150078/missing-x509-extensions-with-an-openssl-generated-certificate
https://security.stackexchange.com/questions/74345/provide-subjectaltname-to-openssl-directly-on-command-line