千家信息网

使用openssl为ssl证书增加“使用者备用名称(DNS)”

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,上一片讲到了多CN的签署方式利用openssl签署多域名证书,在实际使用中遇到了一个问题,在android系统中,浏览器不识别多CN的域名,会报错"证书名称和服务器名称不符",开始以为是自签署CA的问
千家信息网最后更新 2025年02月01日使用openssl为ssl证书增加“使用者备用名称(DNS)”

上一片讲到了多CN的签署方式利用openssl签署多域名证书,在实际使用中遇到了一个问题,在android系统中,浏览器不识别多CN的域名,会报错"证书名称和服务器名称不符",开始以为是自签署CA的问题,换成单个CN之后就正常了,没办法,只能换其他方法了,google N久之后,找到到了方法:


主要修改在openssl.cnf


# 确保req下存在以下2行(默认第一行是有的,第2行被注释了)
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req


# 确保req_distinguished_name下没有 0.xxx 的标签,有的话把0.xxx的0. 去掉
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = ShangHai
localityName = Locality Name (eg, city)
localityName_default = ShangHai
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max = 64


# 新增最后一行内容 subjectAltName = @alt_names(前2行默认存在)
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names


# 新增 alt_names,注意括号前后的空格,DNS.x 的数量可以自己加
[ alt_names ]
DNS.1 = abc.example.com
DNS.2 = dfe.example.org
DNS.3 = ex.abcexpale.net


其他的步骤:

openssl.cnf中会要求部分文件及目录存在:

[root@localhost]#mkdir -p CA/{certs,crl,newcerts,private}

[root@localhost]# touch CA/index.txt

[root@localhost]#echo 00 > CA/serial


1.生成ca.key并自签署

openssl req -new -x509 -days 3650 -keyout ca.key -out ca.crt -config openssl.cnf


2.生成server.key(名字不重要)
openssl genrsa -out server.key 2048

3.生成证书签名请求
openssl req -new -key server.key -out server.csr -config openssl.cnf
Common Name 这个写主要域名就好了(注意:这个域名也要在openssl.cnf的DNS.x里)

4.查看请求文件
openssl req -text -noout -in server.csr
应该可以看到这些内容:
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=US, ST=Texas, L=Fort Worth, O=My Company, OU=My Department, CN=server.example
Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit)
Modulus (2048 bit): blahblahblah
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:domain.example.com, DNS:xxx.example.com
Signature Algorithm: sha1WithRSAEncryption

5.使用自签署的CA,签署server.scr
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config openssl.cnf
#输入第一步设置的密码,一直按y就可以了


server.crt server.key就是web服务器中使用的文件。

NGINX 双向认证

如果要做NGINX客户端证书验证的话,重复2、3、4,并执行下面命令生成个人证书
5.生成个人证书
openssl pkcs12 -export -inkey xxx.key -in xxx.crt -out xxx.p12

将个人证书导入pc,同时在nginx ssl基础上增加设置:
ssl_verify_client on;
ssl_client_certificate ca.crt;


附件:http://down.51cto.com/data/2364976
证书 生成 个人 域名 文件 名称 一行 内容 方法 服务器 问题 服务 重要 办法 单个 双向 同时 名字 命令 基础 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 怎么看数据库有没有安装插件 江苏设备自动化整合系统软件开发 数据库连接池数初始为0 汽车车载网络技术 英文 梅州数据库存储服务器找哪家 网络安全法核心 怎么把域名绑定到服务器 华为自动驾驶软件开发公司怎么样 黄岩区定制软件开发设备制造 信息时代网络安全就是头等大事 云服务器怎么配置ftp网站 福建省高职计算机网络技术教材 虾米音乐2017数据库 学软件开发有哪些方向 c语言 数据库轮询 上海青浦软件开发公司 广东棋牌软件开发哪家好 南京玄武网络技术学院 网络安全教师征文 确立网络安全意识 网络安全课挂科 小型游戏服务器一年多少钱 网易手机版mc服务器钻石指令教学 网络安全的几十字的短文 红包系统数据库设计 关于撤销网络安全等级测评 甘肃网络技术开发采购 服务器运行维护和资源管理 云服务器的英文 网络安全法是公法
0