1.使用openssl生成私钥文件server.key,以下的步骤都是使用openssl操作的,需要注意一下系统时间,不要制作出来的证书是过期的。
openssl genrsa -out server.key 2048
2.1修改 openssl.cnf,因为我之前在做这部分的时候,证书需要支持多个域名和修改参数填写的默认值,所以才需要这个步骤,制作单域名证书可以不用修改配置文件。直接去除config 具体参数自己手动填写,有个这个config 直接看方括号里的默认值内容是正确的直接回车就可以
2.2拷贝openssl.cnf到当前目录
按以下修改拷贝过来的配置文件:
- 在 [ req ] 块下取消注释行 req_extensions = v3_req
- 确保[ req_distinguished_name ]下没有 0.xxx 的标签,有的话把0.xxx的0. 注释掉
- 在 [ v3_req ] 块下增加一行 subjectAltName = @alt_names
- 在文件末尾增加如下信息,是为了添加验证的域名的:
[ alt_names ] DNS.1 = blog.mengliwei.net DNS.2 = blog.mengliwei.net DNS.3 = *.blog.mengliwei.net
- 注意有没有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 才能自签。生成ca.key,并自签名生成ca.crt证书,需要填写密码两次,如1234,填写的Common Name要和上面生成CSR文件一致。其他步骤一样,建议还是按照CSR文件那样填写就好了。
openssl req -new -x509 -days 3650 -keyout CA/ca.key -out CA/ca.crt -config ./openssl.cnf
这里时间可以看到签了十年。注意我的搞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
4.2然后用自己搞的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
5. 这时候当前目录有这几个文件: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就不会跳出不安全提示了。
IIS 中导入证书和话,需要 pfx格式,用以下命令转换(提示Enter Export Password 的时候 输入两次导出密码)
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
在windows上,可也可运行mmc ,然后 在文件—->添加删除管理单元 把证书选上,在“受信任的证书颁发机构”中导入我们的ca.crt。也就完成了。
将CSR文件交给厂商签名就是因为厂商的CA证书有内置在浏览器里,所以即使没有手动导入,也不会出现不安全提示。
文章抄袭于:https://www.cnblogs.com/liqingjht/p/6267563.html