日历
«  2025 3  »
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
网站统计
  • 建站时间: 2021/04/12
  • 日记:17 篇
  • 照片:12 张
  • 话题:0 篇
  • 评论:6 篇
  • 注册用户:1
  • 今日访问:1515
  • 本周访问:4765
  • 本月访问:26087
  • 全部访问:872098

自签名网站证书

2025/01/17  作者:寒冰   心情: sunny  星期五 (11:16)

自己做的app需要访问网站以获取数据,然后考虑到安全,觉得还是应该使用https安全链接,但是奈何https证书需要每年上千甚至几千的费用.进而想到,既然是自己的app访问自己的网址,那么完全可以使用自签名证书,这样app可以用自制的根证书来验证,免费方便且不用花一分钱.

说干就干,第一步,就是先生成自己的证书.等等...突然想起来, 现在国内网站都开始支持汉字了, 证书的信息直接使用汉字,那不是更友好吗?

查一下,看看别人都是怎么干的.然后发现很简单, openssl已经支持utf-8了, 生成请求证书的时候,只要加上参数-utf8就可以支持utf-8(中文)了,那就开始吧


第一步, 生成根证书用于后面自签名:

#生成根证书私钥,文件名rootCA.key

$openssl genrsa -des3 -out rootCA.key 2048

#生成根证书

$openssl req -x509 -sha256 -new -nodes -key rootCA.key -days 3650 -out rootCA.crt

第二步,生成服务器证书并自签名

#生成服务证书私钥

$openssl genrsa -out dhxy_net.key 2048
#生成服务请求证书

$openssl req -new -key dhxy_net.key -out dhxy_net.csr -utf8
#用自己的根证书签名

$openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -in dhxy_net.csr -out dhxy_net.crt -days 3650

好了,现在已经生成了服务器用的证书了,但是因为使用的tomcat,所以还要进一步生成pfx格式的证书

$openssl pkcs12 -export -out dhxy_net.pfx -inkey dhxy_net.key -in dhxy_net.crt -password pass:<密码>
<密码>改成自己需要得密码即可生成pfx格式的证书了.


将生成得证书文件dhxy_net.pfx配置到tomcat,重启服务, 证书就可以生效了.

然后把ca根证书存到浏览器的受信根证书区域.然后访问网站, 哎? 不对啊, 证书无效?

提示: net::ERR_CERT_COMMON_NAME_INVALID, 这种错误,我印象中,就是域名不匹配造成,但是自己检查了输入的参数,没问题啊,确实对上了.

好吧,遇事不决,网络搜索,我相信我遇到的所有问题,肯定前面已经有无数人遇到过了.

嗯..果然, 原来是最近今年浏览器升级了对证书的要求, 需要v3版的证书才能正常工作,找到问题就好解决了.

按照网上搜索的结果,修改配置文件,其实就是增加了几个参数.

#openssl.cnf 文件,

1.找到req_extensions,把前面得#删除,变成这样:
req_extensions = v3_req # The extensions to add to a certificate request

2.合适得位置,增加一行:subjectAltName = @alt_names
3.增加alt_names段
[ alt_names ]

DNS.1 = dhxy.net

DNS.2 = *.dhxy.net

IP.3 = 47.101.138.100

好了,保存,重新对服务证书自签名
#增加了-extfile /etc/pki/tls/openssl.cnf -extensions v3_req,

$openssl x509 -req -CA ../rootCA/rootCA.crt -CAkey ../rootCA/rootCA.key -CAcreateserial -extfile /etc/pki/tls/openssl.cnf -extensions v3_req -in dhxy_net.csr -out dhxy_net.crt -days 3650

这时候生成得服务证书,已经是v3版的了,有了扩展属性

重新生成pfx证书并配置到tomcat, 重启服务, 终于, 浏览器已经可信任我的服务证书了.


但是当我换成mac系统的safari浏览器时,新的问题出现了, 直接提示证书无效,怎么回事呢,继续网络搜索,哦...原来苹果自2019年开始,就强制证书有效期为一年了,有效期超过368天的证书,直接不认可.找到问题原因,那就简单了, 重新前面把-days参数由3650改成365,并重新生成pfx格式,

重启服务后,safari终于也识别成了.

完美解决

引用地址: https://dhxy.net/html/trackback.do?id=23&type=1 (复制地址)
工作笔记 | 评论(0) | 阅读(225) | Trackback(0) |