关于 macOS keychain 误删与恢复的二三事
起因
以 Mac 为主力机的我*习以为常的事情就是使用 keychain access 来记录各种密码,比如软件的密码 备份硬盘 印象笔记 ,网页的密码 Safari 密码管理。
可是*近在捣鼓 iOS 越狱开发,需要生成临时证书 Apple Development,随后开始了作死之旅,由于*次生成的证书不过关,按照给的操作提示,我需要删除证书重新添加。然后我手抽不知道是什么误操作把 keychain 部分清了,没错,就是清了
开始是触摸解锁用不了,我还以为是电脑卡了,后来用 Safari 打开密码管理也用不了,等手动输入密码后发现里面 空空如也
瞬间整个人都不好了,心如死灰,那可是我赖以生存的为数不多的家当啊!
可是人活着总是要干饭的,没办法,尝试挽救
挽救
怎么才能把密码全部找回呢,刚开始上网查找之后
发现 keychain 存放的两个位置分别是 /Library/Keychains/ 和 /User/$username/Library/Keychains/,凭借经验直接猜测分别对应系统和登陆(用户)选项
因为经常备份,知道 Mac 的时间机器功能,去寻找*近未被修改的两个 Keychain 文件夹,直接群体恢复,*次没用,然后我又试了第二次,莫名其妙的好了
喜大普奔~!
思考
怕以后还是不小心脑抽删 Keychain,决定找一下更细一点的对应文件
打开 keychain access 软件,翻能不能找到对应存储位置,怎么翻都翻不到
结果随手往 钥匙串 几个选项上一放,DING!它出现了!
这下知道了,对应密码存放文件即为login.keychain-db 和 System.keychain
然后我们开始观察这两个文件所存放的内容,由于我们主要用来存放密码,暂时不太考虑证书之类的东西,手动调整种类为密码
首先是系统密码,我们可以看到里面存放的都是 Wifi 密码,那就下一个登陆密码,由于登陆密码是关联用户账户的,所以我们可以看到很多都是关于用户账户功能的密码,比如 身份识别认证,密码重置密钥,设备识别,这有可能会涉及到用户登陆的
当然这里面还有的就是设备上安装的软件密码,比如印象笔记,Reveal2,Docker
*后我们直接查找 Safari 相关,然后看到了比较有趣的名称,继续开始猜测
Safari Forms AutoFill Encryption Key:即与自动填充密码相关的密钥
Safari History Key:与历史记录相关的密钥
Safari Session State Key:与网站链接 Session 状态的密钥
“Safari 浏览器”WebCrypto 主密钥:网页加密所用密钥
为了印证猜测,去 Safari 存放数据的地方翻一翻,路径:/User/$username/Library/Safari/
随机选一个文件按一下 Space 快速预览进行判断,比如AutomaticBookmarksBackup.html,就可以看出是书签,可是跟我目前的书签列表有些许出入
暂且不管,继续看:
AutoFillCorrections.db CloudAutoFillCorrections.db:猜这里就是存放自动填充密码的地方
Databases:对应 WebCrypto 加密的 IndexedDB
History.db:对应 Safari History key
LastSession.plist:对应目前 Safari 所开的标签页
LocalStorage:对应 Safari 打开过的网页
PerSitePreferences.db:对应每个网站的对应偏好设置
其他的 .plist 文件就暂时不说了
结论
Mac 的时间机器功能真是太棒了,使劲吹~!
为了防止以后这种浏览器密码再次被删修复困难,注意:
打开 Apple ID 使钥匙串使用 iCloud,这样应该只要一同步就可以恢复
多备份,*好每周一次
就别没事修改钥匙串了