汇总遇到过的网络安全、加解密方面的问题。

SSH的秘钥对

秘钥对使用的核心:公钥在服务端,私钥在客户端

秘钥对的生成

如果你客户端的~/.ssh目录下有秘钥对, 可直接使用. 注意确保你的私钥的权限: chmod 600 rsa_path.

如果想新生成秘钥对, 需在客户端(bash, powershell均可)执行

cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "[email protected]" -f ~/.ssh/a_to_b_rsa
# a_to_b_rsa 为自定义的秘钥对的名字

秘钥对的使用

私钥就存放在客户端的~/.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项目中配置并使用签名:

  1. 生成GPG密钥:gpg --full-generate-key, 若有现成的则不必生成。
  2. 查看并获取秘钥ID:gpg --list-secret-keys --keyid-format SHORT查看GPG秘钥列表 其中ID就是sec rsa1024/后的8位字符。
  3. 配置Git使用GPG密钥:
    git config --global user.signingkey <Your_GPG_Key_ID>
    git config --global commit.gpgSign true   # 当你想在commit使用GPG签名时才开启
    
  4. 现在就可以使用签名了:git tag -s v0.1 -m "...", git commit -S -m "...", …
  5. 公布公钥,方便其他开发者验证签名:
    • 先导出公钥然后导入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
  6. 其他开发者想要验证签名:
    • 导入公钥:git show maintainer-pgp-pub | gpg --import
    • 验证签名(tag的):git verify-tag v1.0, 或git tag -v v1.0
    • 验证其他操作的签名(没有专门的验证命令):git log --show-signature

其他安全话题


Static Badge Static Badge Static Badge Static Badge
Copyright © 2023-2024 Raymond H., All Rights Reserved.