openssl 生成证书上 grpc 报 legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0
最近用传统的方式 生成的证书上用golang 1.15. 版本 报 grpc 上面
➜ ~ go version
go version go1.15.3 darwin/amd64
上面调用的时候报错了
rpc error: code = Unavailable desc = connection error: desc = "transport: authentication handshake failed: x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0"
如果出现上述报错,是因为 go 1.15 版本开始废弃 CommonName,因此推荐使用 SAN 证书。 如果想兼容之前的方式,需要设置环境变量 GODEBUG 为 x509ignoreCN=0
。
什么是 SAN
SAN(Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。
下面简单示例如何用 openssl 生成 ca 和双方 SAN 证书。
准备默认 OpenSSL 配置文件于当前目录
linux系统在 :
/etc/pki/tls/openssl.cnf
Mac系统在:
/System/Library/OpenSSL/openssl.cnf
cp 目录到你随意目录进行修改设置
cp /System/Library/OpenSSL/openssl.cnf /Users/jackluo/works/golang/src/grpc-go-practice/example/hello/sslconf
此文件的格式是类似 ini
的配置文件格式,找到 [ req ] 段落,加上下面的配置:
req_extensions = v3_req # The extensions to add to a certificate request
将前面的#号去掉
加入一段名为 v3_req
的配置
这段配置中最重要的是在最后导入名为 alt_names
的配置段,因此我们还需要添加一个名为 [ alt_names ]
的配置段:
[ alt_names ]
DNS.1 = www.zchd.ltd
DNS.2 = www.test.zchd.ltd
这里填入需要加入到 Subject Alternative Names 段落中的域名名称,可以写入多个。
接着使用这个临时配置生成证书:
➜ openssl req -new -nodes -keyout ustack.key -out ustack.csr -config openssl.cnf
➜ openssl x509 -text -noout -in zchd.crt
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=CN, ST=Some-State, O=Internet Widgits Pty Ltd, CN=www.zchd.ltd
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:be:b9:25:23:e3:89:39:8e:9e:71:4e:e1:89:da:
fc:e8:ad:46:67:1a:ab:dd:1f:0e:24:52:32:fb:cd:
76:0b:bd:a5:1e:44:88:c1:5d:5d:61:ac:0a:54:6c:
b3:ef:37:a7:e5:d3:73:13:55:c8:17:2c:5b:20:35:
27:03:9e:da:73:97:3e:ce:35:98:0b:a6:22:c0:07:
b2:4e:75:07:29:ee:7b:20:04:79:fd:ff:39:a2:bf:
c6:51:fd:53:9b:20:3c:dc:f4:8c:c1:48:7a:82:df:
e7:bf:a6:95:52:3e:be:77:61:44:9a:b5:18:51:4b:
22:1f:0f:84:9a:62:fb:37:07
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Subject Alternative Name:
DNS:www.zchd.ltd, DNS:www.test.zchd.ltd
Signature Algorithm: sha256WithRSAEncryption
69:c1:c3:4a:26:b3:87:1e:88:2e:be:de:f3:13:00:53:9a:7e:
60:6c:f5:1c:81:f1:04:84:9a:94:55:09:8d:66:05:da:79:7e:
6c:aa:53:a6:1a:d8:d5:bf:bd:51:2e:ee:45:04:6b:c9:24:73:
5b:5b:64:e6:3b:3b:b4:15:90:ba:b5:a4:a6:20:f8:4c:e8:f1:
2e:07:3c:ac:68:a5:3b:8c:ce:86:39:f1:84:59:26:9e:de:4f:
54:19:0c:8b:be:56:49:ef:86:11:86:4e:66:2f:d5:78:1d:fa:
16:76:a4:9f:4c:34:96:72:ef:d0:1d:ef:18:bf:ae:2b:f7:39:
81:38
使用单条命令实现
生成默认 ca:
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=example.ca.com" -days 5000 -out ca.crt
生成证书
openssl req -new -sha256 \
-key ca.key \
-subj "/C=CN/ST=Beijing/L=Beijing/O=UnitedStack/OU=Devops/CN=www.zchd.ltd" \
-reqexts SAN \
-config <(cat /System/Library/OpenSSL/openssl.cnf \
<(printf "[SAN]\nsubjectAltName=DNS:www.zchd.ltd,DNS:www.test.zchd.ltd")) \
-out zchd.csr
签名证书
openssl x509 -req -days 365000 \
-in zchd.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-extfile <(printf "subjectAltName=DNS:www.zchd.ltd,DNS:www.test.zchd.ltd") \
-out zchd.crt
基本上就可以很愉快的玩耍了.
上面生成证书请求时的几个字段的意义:
C => Country
ST => State
L => City
O => Organization
OU => Organization Unit
CN => Common Name (证书所请求的域名)
emailAddress => main administrative point of contact for the certificate
openssl 生成证书上 grpc 报 legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0的更多相关文章
- 如何利用OpenSSL生成证书
此文已由作者赵斌授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.前言 最近为了测试内容分发网络(Content Delivery Network,简称 CDN)添加的新功 ...
- CentOS6系统openssl生成证书和自签证书
CentOS6系统openssl生成证书和自签证书的过程,记录一下,本文基于CentOS 6 64bit.$ yum install openssl openssl-devel 1,生成服务器端的私钥 ...
- 使用OpenSSL生成证书
使用OpenSSL生成证书 下载安装openssl,进入/bin/下面,执行命令(把ssl目录下的openssl.cnf 拷贝到bin目录下)1.首先要生成服务器端的私钥(key文件):openssl ...
- [转帖] ./demoCA/newcerts: No such file or directory openssl 生成证书时问题的解决.
接上面一篇blog 发现openssl 生成server.crt 时有问题. 找了一个网站处理了一下: http://blog.sina.com.cn/s/blog_49f8dc400100tznt. ...
- openssl 生成证书基本原理
摘自:http://blog.csdn.net/oldmtn/article/details/52208747 1. 基本原理 公司一个项目要进行交易数据传输,因为这个项目银行那边也是刚刚开始启动,所 ...
- win openssl 生成证书
第1步:生成私钥 有密码:openssl genrsa -des3 -out private.key 1024无密码:openssl genrsa -out private.key 1024 说明:生 ...
- openssl 生成证书
nginx生成证书,一共四步 1) 生成RSA私钥 (会要求输入至少4位密码)# openssl genrsa -des3 -out private.key 2048 # 2) 根据已生成的RSA私钥 ...
- 使用OpenSSL生成证书并配置Https
1.密钥.证书请求.证书概要说明 在证书申请签发过程中,客户端涉及到密钥.证书请求.证书这几个概念.我们以申请证书的流程说明三者的关系.客户端(相对于CA)在申请证书的时候,大体上有三个步骤: 第一步 ...
- openssl生成证书
数字证书: 第三方机构使用一种安全的方式把公钥分发出去 证书格式:x509,pkcs家族 x509格式: 公钥和有效期限: 持有者的个人合法身份信息:(主机名,域名) 证书的使用方式 CA的信息 CA ...
随机推荐
- JDBC基础篇(MYSQL)——自定义JDBCUtil工具类
package util; import java.io.File; import java.io.InputStream; import java.sql.Connection; import ja ...
- Windows-MacOSX-Ubuntu·不同平台文件互传文件共享
时间:2018-11-23 整理:byzqy 标题:Mac下的virtual box 安装的Ubuntu虚拟机互传文件问题 地址:https://blog.csdn.net/qq_20044689/a ...
- T-SQL - 习题01_查询每门课都大于80分的学生姓名
时间:2017-09-11 整理:byzqy 题目:用一条SQL语句查询出每门课都大于80分的学生姓名. 最近面试C#开发工程师,碰到上面这个考数据库的题目,自己感觉有点难度,没有思路,现将找到的解决 ...
- 神舟G7-CT7NK 安装tensorflow-gpu
参考https://www.cnblogs.com/xbit/p/9768238.html 直接安装,运行keras mnist数字识别报错: Could not create cudnn handl ...
- 剑指 Offer 36. 二叉搜索树与双向链表
剑指 Offer 36. 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的 ...
- 20210811 Dove 打扑克,Cicada 与排序,Cicada 拿衣服
考场 开考感觉 T3 比较可做.T1 看上去不难但毫无思路. 先想了 25min T3,想到一个确定左端点,二分最长的右端点,甚至想到了用猫树维护区间 or and...上厕所回来发现假了,没有单调性 ...
- NOIP模拟26「神炎皇·降雷皇·幻魔皇」
T1:神炎皇 又是数学题,气死,根本不会. 首先考虑式子\(a+b=ab\),我们取\(a\)与\(b\)的\(gcd\):\(d\),那么式子就可以改写成: \[(a'+b')*d=a'b' ...
- Codeforces 1365D Solve The Maze
### 题目大意: 在一个 $n * m$ 的矩阵中,有空地.坏人.好人和墙.你可以将空地变成墙来堵住坏人.$(n, m)$为出口,是否存在一个方案使得矩阵中所有好人能够走到出口,而所有坏人不能通过出 ...
- 八、Abp vNext 基础篇丨标签聚合功能
介绍 本章节先来把上一章漏掉的上传文件处理下,然后实现Tag功能. 上传文件 上传文件其实不含在任何一个聚合中,它属于一个独立的辅助性功能,先把抽象接口定义一下,在Bcvp.Blog.Core.App ...
- 计算机网络-TCP篇
TCP篇 之前的总结文章:TCP简单版本介绍-三次握手等 基本认识 TCP 是⾯向连接的(⼀定是「⼀对⼀」才能连接).可靠的.基于字节流的传输层通信协议. RFC 793 是如何定义「连接」的:⽤于保 ...