使用openssl签发ssl证书
如果想给自己的服务用上ssl,需要证书服务,一般都需要购买才行,但是其实主要是信任的问题,所以完全可以用自己的自签名的证书(只要自己想办法确认私钥不会泄露)
步骤
openssl生成rsa秘钥
1 |
|
使用秘钥生成证书申请
1 |
|
再用生成的秘钥自己给自己签名
1 |
|
如此生成了一个有效期一年的自签名证书。
如果要在不同的域名(或者IP)上使用ssl,还需要针对每一个主机各自签发证书。步骤类似的
note:按照接下来这几步生成的证书现在浏览器已经不认了,建议直接跳转到后两小节Subject Alternatice Name
note2:由于安卓手机对安装的CA证书有限制,所以需要在生成root证书时,加上
CA:TRUE
的扩展字段,生成这类证书的过程参考这里[9]。
生成秘钥
1 |
|
使用秘钥生成证书申请
1 |
|
再用刚刚的根证书对这个证书申请签名
1 |
|
如此签发了一个有效期一年的证书。
but
但是目前测试在客户端(Edge on Windows11)上试了一下还是会报错,虽然windows已经把root.crt安装到可信的根证书颁发机构。Chrome报错是net::ERR_CERT_COMMON_NAME_INVALID
Subject Alternative Name
根据IdeaWand[7]的说法,现在的浏览器基本上都放弃了CommonName。转而使用Subject Alternative Name,所以需要生成带有SAN的证书。
所以在生成服务器的证书的时候需要指定这些extension。根据zmc[8]的教程
首先生成根证书的过程是不变的
1 |
|
然后生成服务器证书的秘钥也是不变的
1 |
|
然后需要编写配置文件,在配置文件中指定一些extension字段,server.conf
1 |
|
注释掉的行大概是一些控制证书的用途的字段,不知道是哪一行导致的不能用于https,所以就都注释掉了。
然后依赖这个配置文件,生成服务器证书的申请
1 |
|
然后使用自签名的根证书,签发服务器证书。
1 |
|
然后得到的server.crt
就是有效的证书,然后就[6]可以用于https了。
References
- 使用openssl制作自定义CA、自签名ssl证书 ↩
- Openssl生成自签名证书,简单步骤 - 凝雨 - Yun ↩
- 自签名证书和CA证书的区别和制作、使用 - 名字很长容易被惦记 - 博客园 ↩
- 使用 OpenSSL 生成私钥和签名并自己做 CA 签名 | ↩
- 局域网内搭建浏览器可信任的SSL证书 – 唐玥璨 | 博客 ↩
- Apache配置ssl证书-实现https访问 | Galiyy’blog ↩
- 使用OpenSSL生成含有Subject Alternative Name(SAN)的证书 | IdeaWand ↩
- OpenSSL证书通过Subject Alternative Name扩展字段扩展证书支持的域名 - 人艰不拆_zmc - 博客园 ↩
- https://foreverzmyer.hashnode.dev/cert ↩