文档章节

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

山哥
 山哥
发布于 2016/03/19 14:01
字数 671
阅读 2366
收藏 10

今天在逛淘宝时,发现淘宝的 https SSL证书的使用者是 *.tmall.com,但是淘宝是 www.taobao.com,域名不一样,竟然还是绿色的(taobao.com域名能使用tmall.com的SSL证书?),顿时感到很奇怪,于是查看了其 SSL 证书的详细信息发现原来是这样的:SSL证书支持配置多个使用者备用名称(见下图红色区域):

于是到网上搜了下:“SSL证书配置使用者可选名称”,发现了下面这篇文档(http://colinzhouyj.blog.51cto.com/2265679/1566438),故留记备用了:

主要修改在 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;


© 著作权归作者所有

山哥

山哥

粉丝 249
博文 355
码字总数 136865
作品 0
南京
程序员
私信 提问
使用SSH密钥对给你的阿里云ECS加把安全锁

先说一下:什么是 SSH 密钥对 SSH 密钥对,常简称为密钥对,是阿里云为您提供的新的远程登录 ECS 实例的认证方式,是一种区别于传统的用户名加密码模式的认证方式。 SSH 密钥对通过加密算法生...

51干警网
2018/05/24
0
0
Linux学习笔记(六)---Xshell通过公钥连接CentOS系统

前面我们通过ssh,使用服务器端用户名和密码远程连接CentOS系统。这种方式还不够安全,为了提高连接访问的安全性,建议使用密钥认证。 具体的操作及配置如下: 1.在Xshell中创建密钥对(公钥和...

liulangren0533
2018/07/06
0
0
ICANN 计划于10月11日对 DNS 根区密钥进行首轮变更

互联网名称与数字地址分配机构 ICANN 近日宣布,董事会已批准对密钥进行首轮变更,此举将保护号称"互联网的地址簿"的域名系统 (DNS)。他们计划在 2018 年 10 月 11 日对 DNS 根区的密钥进行变...

王练
2018/09/23
596
0
详细讲解配置Linux系统下的动态DNS服务

在网络管理中,对于DNS服务的管理是一项基础性的工作。随着用户规模的扩大,频繁地手工修改DNS的区域数据库文件不是一件轻松的工作。关于动态DNS(DDNS)的研究逐渐引起了人们的关注,不同的平...

红薯
2009/05/07
462
0
OpenSSH dropbear

SSL/TLS: SSL:安全的套接字层;1.0 2.0 3.0 TLS:传输层安全;1.0 1.1 1.2 1.3 SSL会话过程四个阶段: SSL Handshake Protocol: 第一阶段:ClientHello 1.协商所支持的协议的版本,如tls...

杨铄
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部