近期观察到访问 Emby 视频页面 player.neochris.com 时提示证书过期。
回想起年初出于易扩展的考虑,在当时进行过 SSL 证书升级,开始使用 letsencrypt 的通用符证书并应用定时更新。本以为是当时疏忽导致证书路径没有替换,但打开 emby-proxy.conf 配置文件后发现证书路径正确,并且其它子域名如云盘 cloud.neochris.com 的证书却正常如期更新。
经过排查发现 Emby 使用了 PKCS #12 文件以支持加密传输,而当时搭建 Emby 时此证书是手动使用 privateKey,chain,cert 文件在 sslshopper 上转换的。为了避免周期性手动更新,打算直接在 linux 上写个定时任务。
《The Most Common OpenSSL Commands》中列出了部分常用的 openssl 命令,其中包含了不同格式的证书转换命令。
- Convert a DER file (.crt .cer .der) to PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
- Convert a PEM file to DER
openssl x509 -outform der -in certificate.pem -out certificate.der
- Convert a PKCS#12 file (.pfx .p12) containing a private key and certificates to PEM
openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
You can add -nocerts to only output the private key or add -nokeys to only output the certificates. - Convert a PEM certificate file and a private key to PKCS#12 (.pfx .p12)
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
因此,通过使用如下命令来完成证书更新:
openssl pkcs12 -export -out /home/emby/cert.pfx -inkey /etc/letsencrypt/live/neochris.com/key.pem -in /etc/letsencrypt/live/neochris.com/cert.pem -certfile /etc/letsencrypt/live/neochris.com/fullchain.pem
其中下划线部分为可替换的输出与输入文件相关路径。-out 后的路径为 PKCS #12 证书的输出路径,确保此路径及文件名与 Emby 配置一致(Emby 界面,设置-专家-高级-自定义 SSL 证书路径)。-inkey -in -cert 后跟相关 key 和 cert 文件。如果使用 letsencrypt 的证书,一般仅需替换域名部分即可。
证书完成后,重启 Emby 服务器,不再提示证书过期警告。
最后添加定时任务即可完成周期性定时更新。
说点什么