安全性
简中很多文章说自签名证书不安全,这要看你怎么用。
如果你是搭建面向公众的服务,例如网站 那么肯定不够安全的。 这是因为 普通用户无法通过简单并安全的方法验证你的证书是否真的是你的。因为没有权威ca存在了。
而如果是面向内部使用的,我们可以通过权威ca 或者 其他加密途径分发证书。或者通过证书指纹验证的方法来确保安全。
当然指纹验证严格说 也不够安全,虽然指纹被伪造的可能性也几乎没有。
我们只要 保证 证书分发的过程是安全的,那么自签名证书的安全性 甚至可以超过 可信ca颁发的证书(参考我朝某衙)。
碎碎念
ca机构运营是有成本的,所有权威证书需要付费无可厚非。但是自签证书并非不安全,资本的文章看看就好,多读书。
同样类似 ssh协议,默认情况下,和自签名证书的过程其实并无差距。那么ssh不安全吗?
自签名证书的优点
- 和商业收费证书同样安全性,某些方便甚至超过收费证书
- 可以灵活控制有效期,例如在某些特殊情况下,需要超长的有效期
- 自主可控
- 可以省略OCSP服务,速度会更快
OCSP 主要是方便检查证书是否有效的情况,也就是可以吊销掉已经签发出去的证书。但是OCSP会多了一个网络验证的操作,这也是某些在国内没有OCSP服务器的一些商业证书速度很慢的 原因。
自签名ca和域名/ip证书的过程
下面一个简单说一下,自己用openssl实现 自己的ca 并签发证书的过程
ca
CA私钥
|
|
CA请求文件
|
|
CA证书
|
|
用ca签发证书
生成域名 私钥和 证书请求文件:
openssl genpkey -algorithm RSA -out domain_private.key openssl req -new -key domain_private.key -out domain_request.csr
从ca证书 签发证书
简单创建 一个 10年的
|
|
但是这个证书里面没有域名,客户端依旧会伪造,创建一个包含域名的
|
|
创建一个包含域名和ip范围的
|
|
域名私钥和证书合并到一个 .pem
有部分软件是使用的 all in one的 pem格式,例如monit
|
|
客户端应该如何信任
上面命令中的 ca_certificate.crt 和 domain_certificate.crt 都是包含公钥的证书文件,服务器会自动分发给客户端。但是这个过程是无法保证安全的。
那么 这个两个文件,可以通过其他可信的途径分发给客户端。 例如: 可信ca的 https webdav email 甚至vpn 线下 内网 等方式
一般情况下,建议客户端信任 ca_certificate.crt 即可。那么所有使用 ca_certificate.crt 签发的证书,只要ip/域名 能对应 客户端就会认为是安全的。
如果只是信任 domain_certificate.crt 的话,那么自己的ca证书签发的别的证书就无法可信了。这个很好理解。
那些文件是可以公开的
只有 ca_certificate.crt 和 domain_certificate.crt 这两个文件 可以公开的。其他文件务必妥善保管。 尤其是 ca_private.key 这个文件,如果泄漏 就等于 天朝某衙门作恶了。