自建根证书,中间证书和Server端X.509证书并搭建nginx验证Server端证书有效性

X.509证书的颁发和使用

X.509证书是用来认证身份的,例如在访问一个HTTPS网站的时候,浏览器会首先下载该网站 的证书,验证是否有效。如果无效,浏览器会提示您的连接不是私密连接,进一步访问网站有风险。 如果有效则可以直接访问,不会告警。

浏览器怎么验证网站证书是否有效呢?简单说就是看网站证书的颁发机构是不是已经被操作系统信任,即看 颁发机构的身份证书是否已经安装到操作系统里,并被设置为信任。

那么我们接下来做的事情就是在mac系统上验证浏览器的上述行为。

验证步骤,

  1. 生成根证书,中间证书和Server端证书(即用户证书)
  2. 本机搭建nginx服务器,并设置Server端证书(!!注意此时未安装根证书到操作系统)
  3. 浏览器访问https://localhost,出现告警提示
  4. 把根证书和中间证书安装到操作系统,并设置根证书为永久信任
  5. 重新访问https://localhost,正常,没有出现告警。

第一步,生成根证书,中间证书和Server端证书

颁发机构通常会有根机构和中间机构,根机构的证书自己签发自己,中间机构的证书由根机构签发,而Server端证书由中间机构签发。本人参考以下三篇文章创建了根证书,中间证书和Server端证书。

不过需要注意的是,Server端证书有效期不要太长,否则即使安装了根证书也会告警

第二步,本机搭建nginx服务器,并设置Server端证书

mac下安装nginx很简单

1
brew install nginx

然后修改/usr/local/etc/nginx/nginx.conf文件,在server里添加三行

1
2
3
listen       443    ssl;
ssl_certificate /Users/ym/tmp/myca/localhost/certs/localhost.cert.pem;
ssl_certificate_key /Users/ym/tmp/myca/localhost/private/localhost.key.pem;

启动nginx

1
brew sevices start nginx

第三步,浏览器访问https://localhost

显示告警信息 invalid-certificate

第四步,把根证书和中间证书安装到操作系统,并设置根证书为永久信任

在mac系统下,点击lauchpad,并搜索钥匙串访问。可以看到登录下安装的证书。 在finder中打开根证书和中间证书,可以添加到登录账号下。 只需要设置根证书为永久信任即可。以为中间证书是由根证书签发的。 以下是已经安装的根证书 root-ca-crt

以下是已经安装的中间证书 mid-ca-crt

第五步, 重新访问https://localhost

重新访问https://localhost。正常。

valid-crt