定时更新 Emby SSL证书 / PEM 转 PKCS12

近期观察到访问 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 服务器,不再提示证书过期警告。

最后添加定时任务即可完成周期性定时更新。

如何接入 Facebook 社交帐号登陆授权

1. 前往 Facebook 开发者中心,使用脸书帐号进行登录。

2. 如果此前未创建过开发者帐号,点击右上角的“新手入门”按钮,跟随引导创建一个开发者帐号。已创建过或创建完成的,点击右上角的“我的应用”,选择“添加新应用”,输入名称和邮箱后完成创建。

3. APP 创建完成后,会自动跳转至该 APP 的主页,在“添加产品”项目下选择“Facebook 登录”,点击“设置”按钮。

4. 选择“网络”选项,输入网站 URL 后点击“保存”。

5. 点击左侧导航栏“Facebook 登录”下的“设置”页面,确保“OAuth 客户端授权登录”、“OAuth 网页授权登录”、“强制启用 HTTPS”选项为“是”,并在有效 OAuth 跳转 URI 栏中填入网站相关地址,保存更改。

6. 在左侧导航栏中点击“设置”下的“基本设置”,填入隐私政策和服务条款的相关链接,并选择网站分类,点击“保存更改”。

7. 点击页面上方的“发布”按钮。按钮左侧是应用编号,并可在第 6 步的基本设置中找到应用密钥。

8. Facebook 帐号登录接入完成。

如何接入 Twitter 社交帐号登录授权

1. 前往 Twitter 开发者中心,使用推特帐号进行登录。

2. 如果此前未使用过开发者功能,需要先点击“create a developer account”以创建一个开发者帐号。选择个人用途,填写使用说明,同意《许可协议》 并验证邮箱,即完成开发者帐号的创建过程。

3. 点击“create an app”创建一个 APP,输入自定义的项目名称、描述、网站链接。选中“Enable Sign in with Twitter”,填写 Callback URLs,完成 APP 创建。

4. 在 App details 标签下点击该 APP 的“Edit”按钮,填入“Terms of Service URL”和“Privacy policy URL”并保存更改,以开启后续的设置。

5. 在 Permission 标签下点击“Edit”按钮,将接入权限改为“Read-only”只读状态,并选中“Request email address from users”复选框(如果网站需要给访客推送订阅的消息通知),保存设置。

6. 点击“Keys and tokens”标签页,获得该 APP 的 API keys 和 API secret keys,用于接入 Twitter 社交帐号即可。

如何接入 Google+ 社交帐号登录授权

08b1dc65ad7449f58970

1. 前往 Google API 管理界面,使用谷歌账号进行登录。

2. 点击“创建项目”按钮,输入自定义的项目名称后点击“创建”,网页自动跳转至新项目的 Dashboard 信息页面。

3. 点击左上角按钮呼出左侧导航菜单,选择“API 和服务”。

4. 点击“启用 API 和服务”,在搜索框中键入“google+”,选择“Google+ API”并启用。

5. 再次点击左上角按钮呼出左侧导航菜单,在“API 和服务”中选择“凭据”。

6. 选择“OAuth 同意屏幕”标签页,填写应用名称,选择支持的电子邮件地址,并填写其他项目(可选),点击“保存”按钮。

7. 选择“凭据”标签页,点击“OAuth 客户端 ID”。

8. 选择“网页应用”,输入名称和网站

9. 在完成创建时会弹出提示对话框,记录分配的客户端 ID,用于网站与 Google 的链接标识即可。

Vultr 无法 SSH 连接及更换 IP 地址

检查 IP 是否被国内封锁

由于最近疑似防火墙进行了升级,封堵了部分 IP 的多个端口,致使通过这些端口传输信息的服务中断,其中 SSH 也未能幸免(SSH 是一种加密的网络传输协议,Linux 服务器默认端口为 22)。

首先确认故障原因,通过 端口扫描-站长工具,填写 IP 地址和端口号(22或更多),查看该端口国内是否开启。

如果国内 22 端口是关闭的,再检查外网是否能连接上 22 端口。在 国外端口扫描 中填入 IP 和端口号,点击 check。

如果该端口是 open 状态,基本可以确定是国内对该 IP 进行了封锁。

为 Vultr 主机更换 IP 地址

在 IP 被封锁的情况下,一般只能通过更换主机的 IP 来解决。Vultr 无法直接更换 IP 地址,但可以通过备份当前主机数据,并通过备份在新主机上进行恢复的方法曲线进行迁移操作。由于 Vultr 是按时计费,故重新选择机房一般不会产生额外费用。

1. 生成当前主机快照。
登陆 Vultr 管理界面,选择“Snapshots”标签页,点击“Add Snapshot”按钮,选择相应的虚拟主机实例,点击“Take Snapshot”,等待快照完成。

2. 销毁当前主机实例。
选择相应的主机实例,在后方菜单中选择“Server Destory”。

3. 从快照创建主机实例。
点击“Deploy New Instance”,第一步选择机房位置,第二步在“Server Type”中选择“Snapshot”标签页,选中要恢复的快照,之后的设置按流程继续(新建的虚拟主机容量大小不能小于快照的大小),点击“Deploy Now”,等待完成。

4. 检测新主机 IP 是否国内可用。
查看新分配的 IP 地址的相应端口(主要为22)在国内及国外是否为开启状态。如果状态仍为关闭,则需要重复步骤 2~3,直到获得未封堵的 IP 地址即可。

最后,所有端口服务均已恢复,SSR 也可以正常连接了。

《生化危机:启示录2》全昆虫收集

本文提供了所有纹章的所在章节和位置截图。
左侧图的右上角小地图可以提供详细位置。

昆虫(Insect Larvae)仅出现在 Barry 篇。每章节有 6 个。

《生化危机:启示录2》全纹章收集

本文提供了所有纹章的所在章节和位置截图。
左侧图的右上角小地图可以提供详细位置。

第一章节 8(4+4) 个,第二章节 9(5+4) 个,第三章节 11(7+4) 个,第四章节 10(3+7) 个 – 其中最后 1 个纹章只有好结局(Good Ending)场景才能取得。