美文网首页
openssl 自签名CA颁发多域名证书

openssl 自签名CA颁发多域名证书

作者: 王义杰 | 来源:发表于2019-08-24 14:00 被阅读0次

概述

HTTPS服务是工作在SSL/TLS上的HTTP。
首先简单区分一下HTTPS,SSL ,TLS ,OpenSSL这四者的关系:
SSL:(Secure Socket Layer,安全套接字层)是在客户端和服务器之间建立一条SSL安全通道的安全协议;
TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性;
TLS的前身是SSL;
OpenSSL是TLS/SSL协议的开源实现,提供开发库和命令行程序;
HTTPS是HTTP的加密版,底层使用的加密协议是TLS。
结论:SSL/TLS 是协议,OpenSSL是协议的代码实现。

用OpenSSL配置带有SubjectAltName的ssl请求
对于多域名,只需要一个证书就可以保护非常多的域名。
SubjectAltName是X509 Version 3 (RFC 2459)的扩展,允许ssl证书指定多个可以匹配的名称。

SubjectAltName 可以包含email 地址,ip地址,正则匹配DNS主机名,等等。
ssl这样的一个特性叫做:SubjectAlternativeName(简称:san)

生成证书请求文件

对于一个通用的ssl证书请求文件(CSR),openssl不需要很多操作。
因为我们可能需要添加一个或者两个SAN到我们CSR,我们需要在openssl配置文件中添加一些东西:你需要告诉openssl创建一个包含x509 V3扩展的CSR,并且你也需要告诉openssl在你的CSR中包含subject alternative names列表。

创建一个openssl配置文件(openssl.cnf),并启用subject alternative names:

找到req段落。这段落的内容将会告诉openssl如何去处理证书请求(CSR)。
在req段落中应该要包含一个以req_extensions开始的行。如下:
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

这个配置是告诉openssl在CSR中要包含v3_req段落的部分。
现在我们来配置v3_req,如下:

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = MN
localityName = Locality Name (eg, city)
localityName_default = Minneapolis
organizationalUnitName  = Organizational Unit Name (eg, section)
organizationalUnitName_default  = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max  = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = kb.example.com
DNS.2 = helpdesk.example.org
DNS.3 = systems.example.net
IP.1 = 192.168.1.1
IP.2 = 192.168.69.14

请注意:无论v3_req放哪里,都是可以的,都会在所有生成的CSR中。
要是之后,你又想生成一个不同的SANsCSR文件,你需要编辑这个配置文件,并改变DNS.x列表。

生成私钥

首先我们创建一个私钥:

openssl genrsa -out san_domain_com.key 2048
# 如果是生成ca的使用,建议这样
openssl genrsa -out ca.key 2048

这里的san_domain_com,是你正式使用的服务器的全称地址
创建CSR文件
执行下面语句

openssl req -new -out san_domain_com.csr -key san_domain_com.key -config openssl.cnf
# 注意这里指定了openssl.cnf,使用了上面我们创建的,因为默认是没有`san`。
# 如果之前创建的是ca.key
openssl req -new -out ca.csr -key c.key -confaig openssl.cnf

执行后,系统会提示你要你输入组织信息,并询问你是否想要包含密码(你可以不需要)。接着你将会看到san_domain_com.csr被创建。

检查我们是否创建好了,我们可以使用下面的命令来查看CSR包含的信息:

openssl req -text -noout -in san_domain_com.csr
# 如果是ca.csr
openssl req -text -noout -in ca.csr

自签名并创建证书

openssl x509 -req -days 3650 -in san_domain_com.csr -signkey san_domain_com.key
 -out san_domain_com.crt-extensions v3_req -extfile openssl.cnf

# 如果是ca.csr
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key
 -out ca.crt-extensions v3_req -extfile openssl.cnf

相关文章

  • openssl 自签名CA颁发多域名证书

    概述 HTTPS服务是工作在SSL/TLS上的HTTP。首先简单区分一下HTTPS,SSL ,TLS ,OpenS...

  • 一键自签本地自签名SAN域名证书HTTPS工具(最新版Chrom

    一键自动生成本地自签名SAN域名证书工具 原生OpenSSL生成自签名SAN CA域名(V3签名),在Linux、...

  • CA证书制作实战

    需求:自建CA 颁发证书,使用自签名证书来构建安全网络,所谓自签名证书,就是自己扮演 CA 机构,自 己给自己的服...

  • 证书生成过程及自建CA(一)

    关键字: 自建CA, openssl, https证书,带有多域名 需求 自建CA并签发证书,可以将自建CA的根证...

  • openssl自签名CA证书

    原博客链接 本文非原创,系浏览各博客后结合自身使用的一个总结,方便回顾。 前情提要 通俗理解SSL/TLS协议区别...

  • 证书生成过程及自建CA(二)

    关键字: 自建CA, openssl, https证书,带有多域名 通过自建CA签发证书 准备创建目录保存新生成的...

  • nginx配置自签名https

    nginx配置https是需要CA颁发证书的,为了测试方便,我们可以使用自签名证书1.如何生成自签名证书1.1:我...

  • 基于 OpenSSL 自建 CA 和颁发 SSL 证书

    更多精彩文章https://deepzz.comDesc:基于 openssl,自建 CA,颁发证书 自建 CA ...

  • gRpc 相关

    CA证书自签单向验证Openssl命令 应用 grpc server_http CA证书自签双向验证Openssl...

  • openssl

    制作自签名证书(无用户名密码保护) 制作自签名证书(有用户名密码保护) 制作CA根证书并为第三方颁发证书 获取服务...

网友评论

      本文标题:openssl 自签名CA颁发多域名证书

      本文链接:https://www.haomeiwen.com/subject/ijbfectx.html