汇总遇到过的网络安全、加解密方面的问题。
SSH的秘钥对
秘钥对
使用的核心:公钥在服务端,私钥在客户端
秘钥对的生成
如果你客户端的~/.ssh
目录下有秘钥对, 可直接使用. 注意确保你的私钥
的权限: chmod 600 rsa_path
.
如果想新生成秘钥对, 需在客户端(bash, powershell均可)执行
|
秘钥对的使用
私钥就存放在客户端的~/.ssh
中.
公钥需发送到客户端:
- 自动方法:
ssh-copy-id -i ~/.ssh/name_rsa.pub -p 22 user@remote_host
期间会被要求输入服务端user的登录密码. - 手动方法: 复制
~/.ssh/your_name-rsa.pub
的内容, 追加到服务端主机的~/.ssh/authorized_keys
.
GPG
基础
- 什么是GPG:
PGP 是 “Pretty Good Privacy”(相当好的隐私)的缩写,是一种用于加密、签名和验证电子通信的标准和程序。
在签名
时的工作方式为私钥为己所用,生成数字签名;公钥公之于众,验证我的签名
。
使用场景
文件和通信加密,数字签名,软件包签名,安全身份验证,密码管理等。
Git中的数字签名
Git中tag, commit, merge, pull
等命令都支持数字签名。其作用是使用户能够确认特定提交的作者,并确保相关命令下的提交快照在创建时未被篡改。
如何在一个Git项目中配置并使用签名:
- 生成GPG密钥:
gpg --full-generate-key
, 若有现成的则不必生成。 - 查看并获取秘钥ID:
gpg --list-secret-keys --keyid-format SHORT
, 其中ID就是sec rsa1024/
后的8位字符。 - 配置Git使用GPG密钥:
git config --global user.signingkey <Your_GPG_Key_ID> git config --global commit.gpgSign true # 当你想在commit使用GPG签名时才开启
- 现在就可以使用签名了:
git tag -s v0.1 -m "..."
,git commit -S -m "..."
, … - 公布公钥,方便其他开发者验证签名:
- 先导出公钥然后导入Git数据库:
gpg --armor --export <Your_GPG_Key_ID> | git hash-object -w --stdin
;hash-object的作用:在版本库里把公钥存成了
blob对象
形式,因此会得到一串校验码
。 - 把blob对象单独存成一个tag:
git tag -a maintainer-pgp-pub <校验码>
; - 公布公钥的tag, 方便开发者获取公钥:
git push --tags
- 先导出公钥然后导入Git数据库:
- 其他开发者想要验证签名:
- 导入公钥:
git show maintainer-pgp-pub | gpg --import
- 验证签名(tag的):
git verify-tag v1.0
, 或git tag -v v1.0
- 验证其他操作的签名(没有专门的验证命令):
git log --show-signature
- 导入公钥: