我们之前写过文章描述如何更新 3CX 的 SSL 证书:
- Linux:https://3x.58voip.com/3cx-v15-v16-renewing-ssl-certificate-linux-server/
- Windows:https://3x.58voip.com/3cx-v15-renewing-ssl-certificate/
这里面使用的证书都是给 Nginx 服务器使用的。通常是两个文件,一个 crt 证书文件,一个 key 密钥文件。
有些情况下客户提供的证书是 PFX 格式,只有一个证书文件,同时也需要密码。本文将介绍 3CX 如何更新 PFX 的 SSL 证书。
安装 OPENSSL
由于我们需要将 PFX 的格式转换成 3CX 能使用的格式,需要用到 OpenSSL 软件。
我们建议在安装 3CX 系统的 Debian 上执行命令。
Windows 可以在下面的网页上下载:https://slproweb.com/products/Win32OpenSSL.html
下载后一路下一步就可以完成安装。
安装完成后打开 CMD 输入下面两行命令:
set OPENSSL_CONF=C:\Program Files\OpenSSL-Win64\bin\openssl.cfg set Path= C:\Program Files\OpenSSL-Win64\bin
如果修改了安装路径,需要修改上面的命令
接着我们重新打开 CMD 并输入 openssl version
查询版本。
正确显示版本,说明安装成功!
格式转换
接下来我们将 CMD 的工作路径切换到存放 PFX 证书的目录。并依次执行下列命令:
$ openssl pkcs12 -in [证书文件.pfx] -nocerts -out keyfile-encrypted.key
接着会要求输入 PFX 证书的密码,以及 PEM pass phrase。都输入同一个密码即可。
如果上述命令报错,是因为 openssl 版本太新了,需要在最后加一个 -legacy
的参数。
$ openssl pkcs12 -in [证书文件.pfx] -nocerts -out keyfile-encrypted.key -legacy
接着输入下列命令,将 key 文件解密,并输入密码:
$ openssl rsa -in keyfil-encrypted.key -out keyfile-decrypted.key
最后我们再生成证书文件:
$ openssl pkcs12 -in [证书文件.pfx] -clcerts -nokeys -out certificate.pem
如果报错依然在最后加上参数 -legacy
。
$ openssl pkcs12 -in [证书文件.pfx] -clcerts -nokeys -out certificate.pem -legacy
导入证书
这样我们就得到了两个文件:
- 证书文件:certificate.pem
- 密钥文件:keyfile-decrypted.key
接下来将这两个文件替换 3CX 服务器中的文件地址,并重启 Nginx 服务即可。
- Windows:C:\Program Files\3CX Phone System\Bin\nginx\conf\instance1
- Linux:/var/lib/3cxpbx/Bin/nginx/conf/Instance1
如果话机有使用 TLS 注册,需要把证书内容复制到 3CX 管理控制台 -> 安全 -> 安全 SIP 里。