openssl 自签证书 支持泛解析

1.使用openssl生成私钥文件server.key,以下的步骤都是使用openssl操作的,需要注意一下系统时间,不要制作出来的证书是过期的。

openssl genrsa -out server.key 2048

2.1修改 openssl.cnf,因为我之前在做这部分的时候,证书需要支持多个域名和修改参数填写的默认值,所以才需要这个步骤,制作单域名证书可以不用修改配置文件。直接去除config 具体参数自己手动填写,有个这个config 直接看方括号里的默认值内容是正确的直接回车就可以
2.2拷贝openssl.cnf到当前目录

openssl req -new -key server.key -out server.csr -config ./openssl.cnf

2.3 按以下修改拷贝过来的配置文件:

  1. 在 [ req ] 块下取消注释行 req_extensions = v3_req
  2. 确保[ req_distinguished_name ]下没有 0.xxx 的标签,有的话把0.xxx的0. 注释掉
  3. 在 [ v3_req ] 块下增加一行 subjectAltName = @alt_names
  4. 在文件末尾增加如下信息,是为了添加验证的域名的:
    [ alt_names ]
    DNS.1 = www.flea.work
    DNS.2 = flea.work
    DNS.3 = *.flea.work
  5. 注意有没有www是不一样的域名,我在做证书请求CSR文件的时候,我测试是可以支持泛解析的。
[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = CN
countryName_min                 = 2
countryName_max                 = 2

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = ShangHai

localityName                    = Locality Name (eg, city)
localityName_default            = ShangHai

organizationName                = Organization Name (eg, company)
organizationName_default        = Internet Widgits Ltd

# we can do this but it is not needed normally 🙂
#1.organizationName             = Second Organization Name (eg, company)
#1.organizationName_default     = World Wide Web Pty Ltd

organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = Domain Control Validated

commonName                      = Common Name (eg, your name or your server\'s hostname)
commonName_max                  = 64

emailAddress                    = Email Address
emailAddress_max                = 64

# SET-ex3                       = SET extension number 3

[ req_attributes ]
challengePassword               = A challenge password
challengePassword_min           = 4
challengePassword_max           = 20

unstructuredName                = An optional company name

我的部份配置

3.1 使用私钥和配置文件生成证书请求CSR文件server.csr,没有修改配置文件的不用写配置文件的参数

openssl req -new -key server.key -out server.csr -config ./openssl.cnf

3.2 生成CSR文件需要填写一些信息,Common Name填写主要域名,这个域名要在DNS.XX里,而且接下来做CA自签的时候也Common Name也要一致,不然Windows中把把CA的证书添加到信任机构后Chrome也会提示域名不一样(可能我的openssl.cnf文件 [ policy_match ] 节里的 commonName = supplied 的原因),IE倒正常。我的内容在上面的默认的,一路回车。

4.1 现在我们要搞个CA 才能自签。

4.2 生成ca.key,并自签名生成ca.crt证书,需要填写密码两次,如1234,填写的Common Name要和上面生成CSR文件一致。其他步骤一样,建议还是按照CSR文件那样填写就好了。这里时间可以看到签了十年。注意我的搞CA的时候公司名字改的和SERVER那些不一样。这个签名的时候时候会出错。需要修改openssl.cnf的参数 [ policy_match ] 里面的 全可以搞成optional ,我这里 commonName = supplied 可能导致3.2所提到问题。

[ policy_match ]
countryName             = match
stateOrProvinceName     = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

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

然后用自己搞的CA证书对 服务器CSR证书请求进行签署,我们这里也就是对server.crt进行签署,搞它个五年。输入密码,一直按y就好了

openssl ca -days 1825 -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config openssl.cnf

6. 这时候当前目录有这几个文件:ca.key ca.crt server.key server.crt server.csr,

其中server.key server.crt就是要放在服务器上的,ca.key相当于电脑内置的根证书,客户端电脑 要信任我们创建的这个CA,才会信任他颁发的证书,然后浏览器就不会有安全提示咯。

将ca.crt下载到pc上,在浏览器管理证书那里切到根证书那栏,将ca.crt导入进来,我是把它导到信任的证书颁发机构,这时候你用 https访问openssl.cnf里填写的DNS.XX就不会跳出不安全提示了。

在windows上,可也可运行mmc ,然后 在文件—->添加删除管理单元 把证书选上,在“受信任的证书颁发机构”中导入我们的ca.crt。也就完成了。

将CSR文件交给厂商签名就是因为厂商的CA证书有内置在浏览器里,所以即使没有手动导入,也不会出现不安全提示。

文章抄袭于:https://www.cnblogs.com/liqingjht/p/6267563.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据