如何理解生成自签名证书的若干种方法及方法间的区别?
摘要: 生成自签名证书的操作可以整合到一条命令中,也可以拆分为生成私钥+生成公钥两步进行。生成出的证书既可以直接作为SSL证书使用,也可以当作CA证书,签发子证书作为SSL证书使用。
生成自签名证书
网上的教程中,常见的生成自签名证书的方法有两种:
方法一
将生成公钥和私钥的过程整合到一行命令中:
|
|
方法二
先生成私钥再生成公钥:
|
|
就生成公私钥对而言,上述两种方法没有区别。此时的foo.key
和foo.crt
已经可以作为SSL证书使用了。
当然,我们也可以把foo.key
和foo.crt
作为CA证书,用它们签名子证书,再把签名后的子证书当作SSL证书使用。
这两者的区别在于,只要用户信任了foo.crt
,则foo.crt
签发的一系列子证书都会被用户信任,在同时为多个网站部署自签名证书时会方便许多。
用CA证书签发子证书
生成子证书的私钥:
|
|
关于PKCS#1 Key和PKCS#8 Key的区别,可以参考 https://stackoverflow.com/questions/20065304/differences-between-begin-rsa-private-key-and-begin-private-key 。
生成子证书的CSR:
首先,需要创建子证书的扩展文件(Extension File) :
|
|
然后,使用扩展文件创建CSR:
|
|
当然,也可以把扩展文件的内容通过命令行写入,而不是创建独立的扩展文件:
|
|
生成子证书
使用Key、CSR和Extension File生成子证书:
|
|
或者,像之前那样把扩展文件的内容通过命令行写入:
|
|
如何判断证书是否可以作为CA证书
通过以下命令,查看CA
项的值,可以判断一个证书是否可以作为CA证书使用,即,这个证书是否可以合法地签名其他证书。注意,“是否可以当作CA证书使用”是证书的创建者赋予此证书的内在属性,与“是否是权威CA证书”无关,即使是自签名证书,只要赋予了正确的属性,也可以当作CA证书使用。
|
|
注意: 在证书签发阶段,无论用来签名的证书是否可以当作CA证书使用,签发工具(如,openssl)都不会报错。然而,在证书验证阶段,使用无法被当作CA证书的证书签名的证书将被拒绝认证。
参考文献
OpenSSL CA and non CA certificate - Super User
openssl - Creating an x509 v3 user certificate by signing CSR - Stack Overflow
- 原文作者:Azlith
- 原文链接:https://blog.azlith.com/posts/%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3%E7%94%9F%E6%88%90%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6%E7%9A%84%E8%8B%A5%E5%B9%B2%E7%A7%8D%E6%96%B9%E6%B3%95%E5%8F%8A%E6%96%B9%E6%B3%95%E9%97%B4%E7%9A%84%E5%8C%BA%E5%88%AB/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。