加密的私钥与未加密的私钥保存着相同的密钥材料。转换不会生成新身份,不会重置 VPN 账户,也不会让旧文件失效。它会写出第二份副本,而那份副本承担着不同的静态风险。

这笔交换是否值得,取决于文件将存放在哪里,以及谁能读取它。

转换究竟改变了什么

转换之前,密钥由操作者提供的口令保护。转换之后,它由文件系统权限以及文件周围的一切访问控制来保护。密码学本身没有改变;改变的是攻击者与密钥之间隔着多少道东西。这就是全部比较。

一张表能让差别变得具体。

FormWhat protects itHow it fails
Encrypted keyA passphrase plus file accessWeak passphrase, or an offline attack on the file
Unencrypted keyFile permissions and host security onlyAny reader copies it silently

两种形式都不会自动更安全。它们以不同方式失败,而只有其中一种方式会留下日志记录。

何时保留口令更好

如果受支持的客户端能够提示输入口令,或从经批准的密钥存储中取出它,那么转换毫无收益。你只有一份副本、一道保护边界,需要跟踪的文件也少一个。大多数接受 PEM 密钥的 VPN 客户端都能做到这一点。

当团队共享密钥时,转换同样是错误的一步。共享主机上的未加密文件会变成任何拥有 shell 访问权限的人都能复制的凭据。

未加密副本何时合理

有些服务无法提示输入,有些容器以只读方式挂载机密,有些设备在启动时读取密钥文件而没有交互路径。在这些情况下,放在正确受限目录中的未加密密钥可能是受支持的设计。理由是环境,而不是方便。

如果你说不出谁能读取该文件以及为什么,答案就是不。

命令及其锋利边缘

对于 OpenSSL 3.5 支持的基于文件的密钥,pkey 参考 记录了删除口令,以及输入已加密且未提供密码来源时的交互式提示。最小形式很短,也很容易被粗心地执行。

umask 077
openssl pkey -in protected-key.pem -out new-private-key.pem

三个锋利边缘。输出文件的 I/O 不是原子的,因此已存在的输出路径可能在写入中途被截断。不要把输入路径当作输出,也不要在唯一受保护的副本上试验。请在提示处输入口令,而不是在命令行上输入,因为后者会进入 shell 历史记录。

在更改任何 VPN 配置之前,先检查结果:openssl pkey -in new-private-key.pem -pubout 应当打印出与之前相同的公钥。

转换不会做的事

它不会撤销加密副本,那份副本仍然存在于你留下的任何地方。它不会更改 VPN 账户密码或证书。它也不会修复已经发生的暴露。如果密钥已经泄露,解决办法是替换并在服务端撤销,而不是在本地更改格式。

有意识地删除中间文件,并确认你删除的路径就是你创建的那个。

相关文章