符合Chrome58的证书制作

  Chrome 58开始取消了对通用名检查的支持, 但网上大多数OpenSSL使用教程没有提及这一点, 制作出的证书总是提示ERR_CERT_COMMON_NAME_INVALID 错误, 所以分享出解决办法, 让大家少走弯路  

许多人并不知道,那个包含着SSL证书是否对某域名生效的“通用名称”字段,早在二十年前就被RFC淘汰了。取而代之的应该是SAN(主题备用名称)字段. 然而,这一点多年来一直被忽略,通用名字段被单独使用多年. 从Chrome 58开始, 那些只使用该字段来指示有效域名的证书将不再得到支持。由于被公开信任的SSL证书同时支持两种字段,确保与所有软件的最大兼容性,因此如果您的证书来自受信任的CA,则无需担心.

0. 实验环境

Win7 64bit 旗舰版

Win64OpenSSL_Light-1_1_0f (下载地址http://slproweb.com/products/Win32OpenSSL.html)

下面的操作, 我将建立一个 MyRootCA 的根证书颁发机构, 然后为一个域名是 myserver.com 签发证书

1. Win64OpenSSL_Light-1_1_0f就默认安装在C:\OpenSSL-Win64 吧, 然后将 C:\OpenSSL-Win64\bin\ 加到系统Path里, 因为我准备在其他文件夹生成证书

2.将 C:\OpenSSL-Win64\bin\openssl.cfg 复制到 F:\SSLTest\, 修改以下内容

  a. 将 [ req ] 下面的这行取消注释(删除前面的#)

  req_extensions = v3_req

  b. 在[ v3_req ]加入subjectAltName = @alt_names, 变成

  basicConstraints = CA:FALSE

  keyUsage = nonRepudiation, digitalSignature, keyEncipherment

  subjectAltName = @alt_names  #新增的

  c.新增 alt_names,注意括号前后的空格,DNS.x 的数量可以自己加, 这里的DNS就是你网站的地址

[ alt_names ]
DNS.1 = myserver.com
DNS.2 = *.myserver.com

3. 在某个文件夹(比如 F:\SSLTest\)执行下列命令, 生成必要的文件夹和文件(这些文件和文件夹是 openssl.cfg 要求的)

F:\SSLTest>mkdir demoCA\private demoCA\newcerts
F:\SSLTest>type nul > demoCA\index.txt
F:\SSLTest>echo 01 > demoCA\serial

4.生成CA自签名证书

F:\SSLTest\ openssl req -new -x509 -newkey rsa:2048 -days 3650 -keyout demoCA\private\MyRootCA.key -out demoCA\MyRootCA.crt -passout pass:123456 -config openssl.cfg

解释一下


-days 3650


根证书的有效期是 10年


-passout pass:123456


CA的密钥是 123456


-config openssl.cfg


使用当前文件夹的openssl.cfg作为默认设置, 如果不使用这个命令的话, 将使用C:\OpenSSL-Win64\bin \openssl.cfg


Generating a 2048 bit RSA private key

...............................................................+++

..........................+++

writing new private key to ‘demoCA\private\MyRootCA.key‘

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.‘, the field will be left blank.

-----

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:SiChuan

Locality Name (eg, city) []:ChengDu

Organization Name (eg, company) [Internet Widgits Pty Ltd]:YourCompany

Organizational Unit Name (eg, section) []:YourUnitName

Common Name (e.g. server FQDN or YOUR name) []:MyRootCA

Email Address []:

5.生成用户的 RSA 密钥对

F:\SSLTest\ openssl genrsa -des3 -out myserver.com.key -passout pass:123456

6. 生成用户证书请求

openssl req -new -days 1825 -key myserver.com.key -out myserver.com.csr -config openssl.cfg

下面中的CNSiChuanYourCompany必须与MyRootCA一致, 原因后面讲


Enter pass phrase for myserver.com.key:

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.‘, the field will be left blank.

-----

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:SiChuan

Locality Name (eg, city) []:ChengDu

Organization Name (eg, company) [Internet Widgits Pty Ltd]:YourCompany

Organizational Unit Name (eg, section) []:AnotherUnitName

Common Name (e.g. server FQDN or YOUR name) []:myserver.com

Email Address []:

Please enter the following ‘extra‘ attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

7. 使用 CA 签发用户证书

F:\SSLTest\ openssl ca -in myserver.com.csr -out myserver.com.crt -cert demoCA\MyRootCA.crt -keyfile demoCA\private\MyRootCA.key -extensions v3_req -config openssl.cfg


Using configuration from openssl.cfg

Enter pass phrase for demoCA\private\MyRootCA.key:

Can‘t open ./demoCA/index.txt.attr for reading, No such file or directory

2440:error:02001002:system library:fopen:No such file or directory:crypto\bio\bss_file.c:74:fopen(‘./demoCA/index.txt.at

tr‘,‘r‘)

2440:error:2006D080:BIO routines:BIO_new_file:no such file:crypto\bio\bss_file.c:81:

Check that the request matches the signature

Signature ok

Certificate Details:

Serial Number: 1 (0x1)

Validity

Not Before: Aug  3 15:17:43 2017 GMT

Not After : Aug  3 15:17:43 2018 GMT

Subject:

countryName               = CN

stateOrProvinceName       = SiChuan

organizationName          = YourCompany

organizationalUnitName    = AnotherUnitName

commonName                = myserver.com

X509v3 extensions:

X509v3 Basic Constraints:

CA:FALSE

X509v3 Key Usage:

Digital Signature, Non Repudiation, Key Encipherment

X509v3 Subject Alternative Name:

DNS:myserver.com, DNS:*.myserver.com

Certificate is to be certified until Aug  3 15:17:43 2018 GMT (365 days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

8.生成Windows支持的p12证书

F:\SSLTest\ openssl pkcs12 -export -inkey myserver.com.key -in myserver.com.crt -out myserver.com.p12

建议密码都是123456

9. 验证

在C:\Windows\System32\drivers\etc\hosts中新增一行

127.0.0.1           myserver.com

然后将 MyRootCA.crt 安装到 受信任的根证书颁发机构

在IIS中导入myserver.com.p12, 并为一个网站增加https绑定

然后就可以用Chrome看到效果了

10. 为什么用户证书的CNSiChuanYourCompany必须与MyRootCA一致?

openssl.cfg中有这样一段, 当然你可以按需修改

[ policy_match ]
 countryName     = match                    #证书请求与证书本身一样
 stateOrProvinceName = match                #证书请求与证书本身一样
 organizationName    = match                #证书请求与证书本身一样
 organizationalUnitName  = optional         #可选项
 commonName      = supplied                 #证书请求中必须能存在该项
 emailAddress        = optional             #可选项

示例文件下载

本文参考了

基于 OpenSSL 的 CA 建立及证书签发

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

Chrome 58发布 与SSL安全有关的变化有哪些(太多了, 不知道哪个是原始链接)

时间: 2024-10-16 15:19:51

符合Chrome58的证书制作的相关文章

iOS企业分发证书制作

自签名证书制作流程 打开终端,输入 openssl genrsa -out ca.key 1024 ,生成名称为ca的秘钥 注:openssl生成的文件皆放在用户文档下(finder菜单栏'前往' - 电脑 -Macintosh Hd - 用户 - dongxinda) 根据密钥在桌面生成证书: 终端输入 openssl req -x509 -new -key ca.key -out ca.cer -days 10950 依次填入CN(国家),gd(省),gz(市),dxda(公司名称) dxd

iOS 推送证书制作(JAVA/PHP)

iOS 推送证书制作(JAVA/PHP) 在使用Java或者PHP制作iOS推送服务器的时候,需要自己从开发者网站上导出的aps_developer_identity证书和Apple Development Push Services证书进行合成,生成可以供Java使用的p12证书或供PHP使用的pem证书.aps_developer_identity证书和Apple Development Push Services证书的申请过程可以参考:http://www.cnblogs.com/hubj

iOS -证书制作

iOS证书制作攻略及配置注意事项 使用APICloud平台开发APP商用,首先得有开发者账号和各种证书,之后云编译打包正式版,上传到appstore审核上架.现在APICloud特别推出,证书申请和配置在控制台配置证书的注意事项的攻略,提供给大家. 云编译p12证书制作 生成certSigningRequest文件 如图,打开应用程序->实用工具->钥匙串访问 如图,选择从证书颁发机构请求证书 接下来填写邮件地址,选择存储到磁盘,点击继续 如图,保存文件到桌面. 制作p12证书 首先打开苹果开

nginx证书制作以及配置https并设置访问http自动跳转https(反向代理转发jboss)

nginx证书制作以及配置https并设置访问http自动跳转https 默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这个文件名类似libssl-dev. 生成证书 可以通过以下步骤生成一个简单的证书: 首先,进入你想创建证书和私钥的目录,例如: $ cd /usr/local/nginx/conf 创建服务器私钥,命令会让你输入一个口令: $

iOS 推送证书制作 (JAVA/PHP)

// aps_development.cer 转化成pem openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem // p12 转化成pem openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12 // Java服务器所需的证书为p12格式 openssl pkcs12 -export -in PushChatCert.pem -inkey Push

证书制作 z

一.WCF中的安全方式 说到安全就会涉及到认证,消息一致性和机密性,WCF的安全方式分为两种,即传输安全和消息安全. 传输安全和消息安全的区别:传输安全提供点对点的安全: 比如 A 提供服务,B和C直接连接到A,这时候A与B 及 A与C直接的传输是安全的,如果B通过C连接到A,那么A与B直接是安全的,B与C之间是不安全的.消息安全:是把安全机制都应用在消息级别上面的,能够提供端对端的安全,不管消息的路由路径多么复杂,也能保证消息的安全传输.传输安全我们一般应用在局域网中,消息安全主要应用在复杂的

XenMobile 10 服务器证书制作

在XenMobile 10当中,XenMobile Server的FQDN.XenMobile Server Cluster的FQDN.MDM LB的FQDN以及MAM LB的FQDN均为同一个.(备注:LB,负载均衡英文单词简写).因此我们在制作服务器证书的过程中,我们只需申请一个通配符证书即可. 如果我们用的是公网的证书,那么它是自动信任的. 如果我们的服务器证书是我们自己搭建的内部CA自己签发的,那么我们需要进行一些必要的配置. 第一步:申请服务器证书 打开iiS,点击创建域证书,前提是我

JAVA数字证书制作生成

1.加密算法 为了网络通讯中的报文安全,一般需要对报文进行加密,目前常用的加密算法有: 非对称加密算法:又称公钥加密算法,如RSA.DSA/DSS,最常用的就是RSA算法(算法公开,可自行百度了解算法细节),算法产生一个公钥一个私钥,用公钥加密的报 文只能用私钥解密,用私钥加密的报文只能用公钥解密: 对称加密算法:3DES.AES.RC4,加密密钥与解密密钥相同,一般用于只有通讯双方知道密钥的通讯方式: HASH算法:MD5.SHA1.SHA256,由哈希算法计划得到哈希值,加密过程不可逆,由哈

国密算法SM2证书制作

国密算法sm2非对称算法椭圆曲线 原文:http://www.jonllen.cn/jonllen/work/162.aspx 前段时间将系统的RSA算法全部升级为SM2国密算法,密码机和UKey硬件设备大都同时支持RSA和SM2算法,只是应用系统的加解密签名验证需要修改,这个更改底层调用的加密动态库来,原来RSA用的对称加密算法DES(AES)和摘要MD5(SHA1)也相应改变,分别对应SM1.SM3算法,SM1算法基于硬件实现,SM2.SM3算法已公开. SM2签名验证算法 SM2签名同样也