前言
当时从日志中,一直看到提示证书错误,觉得是网络直接生成的自签名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