删除密钥口令还是保留?你创建的那份副本
未加密的密钥文件以更弱的保护保存着同一个秘密。转换之前先比较静态风险,并了解它无法撤销什么。
加密的私钥与未加密的私钥保存着相同的密钥材料。转换不会生成新身份,不会重置 VPN 账户,也不会让旧文件失效。它会写出第二份副本,而那份副本承担着不同的静态风险。
这笔交换是否值得,取决于文件将存放在哪里,以及谁能读取它。
转换究竟改变了什么
转换之前,密钥由操作者提供的口令保护。转换之后,它由文件系统权限以及文件周围的一切访问控制来保护。密码学本身没有改变;改变的是攻击者与密钥之间隔着多少道东西。这就是全部比较。
一张表能让差别变得具体。
| Form | What protects it | How it fails |
|---|---|---|
| Encrypted key | A passphrase plus file access | Weak passphrase, or an offline attack on the file |
| Unencrypted key | File permissions and host security only | Any 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 账户密码或证书。它也不会修复已经发生的暴露。如果密钥已经泄露,解决办法是替换并在服务端撤销,而不是在本地更改格式。
有意识地删除中间文件,并确认你删除的路径就是你创建的那个。