前言
当时从日志中,一直看到提示证书错误,觉得是网络直接生成的自签名IP ssl证书不够完整,因此产生了配置完整证书链的研究。不过最终的结果证明,其实不用这么复杂,直接签署一个简单的ssl,禁用验证即可,详见此前发布的文章。
创建自签名的根证书 (CA)
- 创建自签名的根证书 (CA)
- sudo openssl genrsa -out /etc/nginx/ssl/rootCA.key 4096
- 生成根证书(有效期 10 年,可调整)
- sudo openssl req -x509 -new -nodes -key /etc/nginx/ssl/rootCA.key -sha256 -days 3650 -out /etc/nginx/ssl/rootCA.crt \
- -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=MyRootCA"
- CN=MyRootCA 是根证书的名称,可自行定义。
创建中间证书
- 生成中间证书的私钥
- sudo openssl genrsa -out /etc/nginx/ssl/intermediate.key 4096
- 生成中间证书的 CSR(证书签名请求)
- sudo openssl req -new -key /etc/nginx/ssl/intermediate.key -out /etc/nginx/ssl/intermediate.csr \
- -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=MyIntermediateCA"
- 使用根证书对中间证书进行签名
- sudo openssl x509 -req -in /etc/nginx/ssl/intermediate.csr -CA /etc/nginx/ssl/rootCA.crt -CAkey /etc/nginx/ssl/rootCA.key -CAcreateserial \
- -out /etc/nginx/ssl/intermediate.crt -days 1825 -sha256
- 这里的 -days 1825 代表 5 年有效期,你可以自行调整。
创建服务器证书
- 生成服务器私钥
- sudo openssl genrsa -out /etc/nginx/ssl/onlyoffice.key 2048
- 生成服务器的 CSR
- sudo openssl req -new -key /etc/nginx/ssl/onlyoffice.key -out /etc/nginx/ssl/onlyoffice.csr \
- -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=<你的服务器IP或域名>"
- 使用中间证书签署服务器证书
- sudo openssl x509 -req -in /etc/nginx/ssl/onlyoffice.csr -CA /etc/nginx/ssl/intermediate.crt -CAkey /etc/nginx/ssl/intermediate.key -CAcreateserial \
- -out /etc/nginx/ssl/onlyoffice.crt -days 365 -sha256
- CN=<你的服务器IP或域名> 需要填你的 服务器 IP 或 域名,否则 SSL 可能报错。
创建完整的证书链
Nginx 需要完整的 证书链文件,将中间证书和服务器证书合并:
- sudo cat /etc/nginx/ssl/onlyoffice.crt /etc/nginx/ssl/intermediate.crt > /etc/nginx/ssl/onlyoffice_fullchain.crt
onlyoffice_fullchain.crt 包含 服务器证书 + 中间证书,Nginx 需要这个完整证书。
配置 Nginx
- ## 配置完整的 SSL 证书链
- ssl_certificate /etc/nginx/ssl/onlyoffice_fullchain.crt;
- ssl_certificate_key /etc/nginx/ssl/onlyoffice.key;
- ssl_trusted_certificate /etc/nginx/ssl/rootCA.crt;
- ssl_verify_client off;
在客户端安装根证书
由于这个证书是 自签名的,你需要 在客户端信任根证书,否则会提示 不受信任。rootCA.crt是一定要复制的,另外几个如:intermediate.csr、onlyoffice.csr、onlyoffice_fullchain.crt 共4个可以一起拷贝到/usr/local/share/ca-certificates/文件夹,并通过下面命令安装信任。Windows双击证书即可安装
- sudo update-ca-certificates