什么是 SAN

SAN(Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。

先来看一看 Google 是怎样使用 SAN 证书的,下面是 Youtube 网站的证书信息:

这里可以看到这张证书的 Common Name 字段是 *.google.com,那么为什么这张证书却能够被 www.youtube.com 这个域名所使用呢。原因就是这是一张带有 SAN 扩展的证书,下面是这张证书的 SAN 扩展信息:

这里可以看到,这张证书的 Subject Alternative Name 段中列了一大串的域名,因此这张证书能够被多个域名所使用。对于 Google 这种域名数量较多的公司来说,使用这种类型的证书能够极大的简化网站证书的管理。

使用 openssl 生成带有 SAN 扩展的证书请求文件(CSR)

首先我们将 openssl 的配置文件复制一份作临时使用,CentOS6 中 openssl 的配置文件在 /etc/pki/tls/openssl.cnf,将这个文件复制到 /tmp 下。

此文件的格式是类似 ini 的配置文件格式,找到 [ req ] 段落,加上下面的配置:

req_extetions = v3_req

这段配置表示在生成 CSR 文件时读取名叫 v3_req 的段落的配置信息,因此我们再在此配置文件中加入一段名为 v3_req 的配置:

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

这段配置中最重要的是在最后导入名为 alt_names 的配置段,因此我们还需要添加一个名为 [ alt_names ] 的配置段:

[ alt_names ]
DNS.1 = www.ustack.in
DNS.2 = www.test.ustack.com

这里填入需要加入到 Subject Alternative Names 段落中的域名名称,可以写入多个。

接着使用这个临时配置生成证书:

$ openssl req -new -nodes -keyout ustack.key -out ustack.csr -config /tmp/openssl.cnf

查看证书请求文件的内容:

$ openssl req -text -noout -in ustack.csr

可以看到此证书请求文件中会包含 Subject Alternative Names 字段,并包含之前在配置文件中填写的域名。

使用 openssl 签署带有 SAN 扩展的证书请求

假设使用本机作为子签署 CA 对此证书请求进行签署,签署的方式为:

$ openssl ca -policy policy_anything -out ustack.crt -config /tmp/openssl.cnf -extensions v3_req -infiles ustack.csr

签署后,查看证书的内容:

$ openssl x509 -text -noout -in ustack.crt

使用单条命令实现

觉得上面的方式太麻烦了?使用命令一步生成带 SAN 扩展的证书请求文件:

$ openssl req -new -sha256 \-key ustack.key \-subj "/C=CN/ST=Beijing/L=Beijing/O=UnitedStack/OU=Devops/CN=www.ustack.com" \-reqexts SAN \-config <(cat /etc/pki/tls/openssl.cnf \<(printf "[SAN]\nsubjectAltName=DNS:www.ustack.in,DNS:www.test.ustack.com")) \-out ustack.csr

上面生成证书请求时的几个字段的意义:

C  => Country
ST => State
L  => City
O  => Organization
OU => Organization Unit
CN => Common Name (证书所请求的域名)
emailAddress => main administrative point of contact for the certificate

签署上面生成的证书:

$ openssl ca -in ustack.csr \-extensions SAN \-config <(cat /etc/pki/tls/openssl.cnf \<(printf "[SAN]\nsubjectAltName=DNS:www.ustack.in,DNS:www.test.ustack.com")) \ -out ustack.crt

查看证书内容:

$openssl x509 -text -noout -in ustack.crt

参考:

  • Creating and signing an SSL cert with alternative names
  • Provide subjectAltName to openssl directly on command line

OpenSSL SAN 证书相关推荐

  1. Openssl生成证书流程

    Openssl生成证书流程 偶然想到在内网配置https,就梳理了下利用openssl与ca生成证书的过程. 生成过程分为服务端跟客户端,这里我在一台上测试. 一.介绍 CA是Certificate ...

  2. openssl生成证书linux,linux中openssl生成证书和自签证书linux操作系统 -电脑资料

    下面来给大家介绍关于linux中openssl生成证书和自签证书的例子,整个过程都讲述的非常详细有兴趣的朋友可进入参考, 1.首先要生成服务器端的私钥(key文件):代码如下复制代码 openssl ...

  3. 使用OpenSSL实现证书操作

    使用OpenSSL实现证书操作 伴随着计算机的发展,计算机的安全问题也一直困扰着我们,在现代社会计算机信息安全更显得格外的重要,如今的社会是一个信息的社会,你我每天都在使用计算机,随着电子邮件.社区网 ...

  4. 如何利用OpenSSL生成证书

    此文已由作者赵斌授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.前言 最近为了测试内容分发网络(Content Delivery Network,简称 CDN)添加的新功 ...

  5. Nginx使用openssl生成证书文件

    方式二:使用openssl生成证书 先要确认当前系统是否有安装openssl openssl version 安装下面的命令进行生成 mkdir /root/cert cd /root/cert op ...

  6. windows下OpenSSL加密证书安装步骤与使用方法

    OpenSSL加密证书一般用于签名认证,含私钥和公钥.在Linux系统中,OpenSSL一般是已经安装好了,可以直接使用.而在Windows系统中,是需要安装使用的. 最近在使用支付平台时,用到了Op ...

  7. OpenSSL签发证书时编码UTF8STRING PRINTABLESTRING不匹配

    问题如下: Check that the request matches the signature Signature ok The countryName field is different b ...

  8. openssl生成证书

    数字证书:第三方机构使用一种安全的方式把公钥分发出去证书格式:x509,pkcs家族x509格式:公钥和有效期限:持有者的个人合法身份信息:(主机名,域名)证书的使用方式CA的信息CA的数字签名谁给C ...

  9. openssl生成证书linux,Linux下使用openssl生成证书

    利用OpenSSL生成库和命令程序,在生成的命令程序中包括对加/解密算法的测试,openssl程序,ca程序.利用openssl,ca可生成用于C/S模式的证书文件以及CA文件. 证书文件的生成步骤: ...

最新文章

  1. 明日开播 | 7 场不可错过的 AI 技术专题
  2. 一个提高查找速度的小技巧
  3. 撸一个简易聊天室,不信你学不会实时消息推送(附源码)
  4. WSDL SOAP 绑定
  5. Redis自定义动态字符串(sds)模块(二)
  6. 跟着大彬读源码 - Redis 6 - 对象和数据类型(下)
  7. UVa 11468 (AC自动机 概率DP) Substring
  8. oracle sql last_value,図でイメージするOracle DatabaseのSQL全集 第3回 分析関数
  9. headfirstjava最新版本下载_读过HeadFirstJava的大神进来看看
  10. noip复赛批量移动文件夹下的文件
  11. java IoT物联网server 读取javascript协议配置文件
  12. 服务端端口状态和客户端端口状态解释-LISTENING-ESTABLISHED-TIME_WAIT
  13. BZOJ2134 单选错位
  14. Easyrecovery12.0.0.2 官方版下载
  15. 视频如何去水印-免费视频水印去除工具
  16. 计算机限制360打不开,360安全卫士软件突然打不开是什么情况?问题原因及解决方法...
  17. 当软件定义存储(SDS)遇见区块链(BlockChain)
  18. 姜小白的Python日记Day14 系统模块详解1 time模块和random模块
  19. 什么是项目风险?如何做好项目风险管理
  20. layui引入php项目,Layui使用入门教程

热门文章

  1. HTTPS是什么幺蛾子
  2. Xcode 工程清理瘦身
  3. Hdoj 2188.悼念512汶川大地震遇难同胞——选拔志愿者 题解
  4. SIMD——MMX指令的溢出处理
  5. [Windows] Flash.Player|AX|PP|32.0.0.142 去广告 不跳更新版
  6. Apache Log4j Server 反序列化漏洞(CVE-2017-5645)
  7. 如何掌控自己的时间和生活
  8. 搜索引擎使用的一些基本技巧
  9. 我有一哥们,老牛逼了……
  10. 复杂网络中节点重要性方面的研究热点问题