Plex 服务器配置Let's Encrypt SSL证书

在自己服务器上运行Plex很久了,很好用,只是总是看着默认的http不爽,因为此服务器已经绑定了域名并设定了https自动跳转,所以每次都会报告不安全,很是烦人。上网搜了下,找到了一个解决方案,比较容易实现。搬到这里备份一下,以防止源链接失效。

原始链接在这里: https://gist.github.com/srilankanchurro/fa3fdeb5cf10ebb251aa88338b8b37db

大致分如下2个步骤:生成验证文件和配置验证文件路径。

1 创建PCKS #12 验证文件

来自Wikipedia:在密码学中,PKCS #12 定义了一种存档文件格式,用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的 X.509 证书,或者打包信任链的全部项目。PKCS #12 文件扩展名为 ".p12 "或者 ".pfx"

因Plex默认读取此文件进行验证, 此处执行如下命令以生成此文件。 注意命令里的YourDomain字符串要替换成自己的域名,这个可以在/etc/letsencrypt/live下看到。

sudo openssl pkcs12 -export -out ~/certificate.pfx \
-inkey /etc/letsencrypt/live/YourDomain/privkey.pem \
-in /etc/letsencrypt/live/YourDomain/cert.pem \
-certfile /etc/letsencrypt/live/YourDomain/chain.pem

上述命令里需要指定3个输入文件和1个输出文件,3个输入文件来自Let's Encrypt,必须保证存在且名称一致。输出文件的路径及文件名由-out 参数指定,可自行决定,上例中将输出文件保存在当前用户的home目录下)。

执行此命令后,它会要求你输入一个密码来加密这个pfx文件,注意这里要选一个不敏感的密码,因为稍后Plex会要求你输入此密码,并且是明文显示,所以一定不要用自己熟悉的密码,不知道plex开发人员怎么会设置这么明显的bug。最终生成一个PCKS #12格式的certificate.pfx文件。

之后复制此pfx文件到某一个路径并更改用户名,这个路径稍后会在Plex配置里用到。注意修改此pfx文件的路径和名称。原作者是这样写的:

sudo mv ~/certificate.pfx /var/lib/plexmediaserver
sudo chown plex:plex /var/lib/plexmediaserver/certificate.pfx

2.配置Plex 服务器

访问32400端口登陆后,打开设置,网络,就可以看到如下这些选项。照着输入并做适当修改:

  • Custom certificate location: /var/lib/plexmediaserver/certificate.pfx
  • Custom certificate encryption key: The password you entered on step 2 of last section
  • Custom certificate domain: https://myhostname.no-ip.org:32400

至此安装完毕,不过我很久没有更新系统了,顺便更新了下系统到最新,然后瞅了一眼运行时间,已经连续运行了107天了,Linux做服务器就是稳定,好用

3.更新验证文件(每90天更新1次)

需要指出上述配置不是一劳永逸的。由于Let's Encrypt发布的SSL证书有效期只有90天,虽然它提供了一个Certbot来保证到期自动更新,但是那个自动更新脚本只是更新了上文提到的几个输入文件,而Plex所需的PKCS #12格式文件并没有更新,所有需要手动重复上述过程来生成该文件并复制到相应路径。生成文件时可以使用相同密码,这样就省掉了第2步。

需要指出更新了验证文件后,如果是Apache,记得要reload或restart 才可以使新的证书生效。 sudo service reload 或 sudo service graceful 都可以。印象中是不需要重启plex的,不过最近一次更新发现需要重启plex,因此把命令也写在这里:

sudo service plexmediaserver restart