Appearance
SSL/TLS
生成ssh密钥对
生成 SSH 密钥对(私钥和公钥)是使用 Git、登录服务器等操作的基础。这个过程很简单,通常在终端(Terminal)或命令行中,用 ssh-keygen 命令就能完成。
标准生成方法
这是最通用的方法,适用于 Windows(PowerShell)、macOS 和 Linux 系统:
打开终端:在你的电脑上打开命令行工具。
输入命令:
bashssh-keygen -t rsa -b 4096 -C "your_email@example.com"-t rsa:指定密钥类型为 RSA。-b 4096:指定密钥长度为 4096 位,安全性更高。-C "your_email@example.com":添加一个注释,通常是你的邮箱,方便标识。
设置保存路径:系统会提示
Enter file in which to save the key,一般直接按回车,使用默认路径~/.ssh/id_rsa即可。设置密码(推荐):系统会提示输入密码(passphrase),可以理解为给私钥再加一道锁。输入后,每次使用私钥都需要验证这个密码。可以按回车跳过,但为安全起见,建议设置一个。
完成:命令执行完后,公钥和私钥就生成好了。默认位置在用户目录下的
.ssh文件夹里:- 私钥:
id_rsa(绝不能泄露!) - 公钥:
id_rsa.pub(可以安全地分享给任何人或服务器)
- 私钥:
更简短的命令
如果你觉得上面的命令参数太多,直接用下面这个也行,它会使用默认参数生成密钥:
bash
ssh-keygen后续的交互步骤和上面是一样的。
在 Windows 上使用 WSL 生成
如果你在用 Windows 的 WSL(Windows Subsystem for Linux),生成步骤和在原生 Linux 上完全一样:
- 打开 WSL 的终端窗口。
- 执行
ssh-keygen,根据提示操作。 - 密钥文件会保存在 WSL 的
~/.ssh/目录下,可以直接通过\\wsl$路径在 Windows 文件资源管理器中找到。
生成后的常用操作
生成密钥后,你通常会用到以下操作:
查看公钥:这是你要添加到 GitHub/GitLab 或远程服务器
~/.ssh/authorized_keys文件里的内容。bashcat ~/.ssh/id_rsa.pub复制公钥到剪贴板:方便直接粘贴。
- macOS:
pbcopy < ~/.ssh/id_rsa.pub - Windows (WSL):
cat ~/.ssh/id_rsa.pub | clip.exe - Windows (CMD):
type %userprofile%\.ssh\id_rsa.pub | clip
- macOS:
测试连接:生成并配置好后,可以用以下命令测试是否能成功连接服务器。
bashssh -T git@github.com # 测试 GitHub ssh -T git@gitlab.com # 测试 GitLab
高级选项与补充
指定不同文件名:如果你需要管理多个密钥,可以在
ssh-keygen时指定不同的文件名。bashssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_mykey -C "my key"生成 Ed25519 密钥:这是一种新兴的、更安全且性能更好的密钥类型,越来越多地受到推荐。
bashssh-keygen -t ed25519 -C "your_email@example.com"
生成自签名证书
linux系统一般有openssl工具, windows系统需要安装openssl工具。windows上如何安装git,也可以直接利用git bash来生成证书。
方式一:一条命令直接生成(最简单)
bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt -subj "/CN=localhost"实测在windows git bash中执行出现:name is expected to be in the format /type0=value0/type1=value1/type2=... where characters may be escaped by . This name is not in that format: 'C:/Program Files/Git/CN=localhost'problems making Certificate Request 导致只生成了server.key文件,没有生成server.crt文件,原因暂时不详。在ubuntu中测试无问题。
参数说明:
| 参数 | 含义 |
|---|---|
req -x509 | 生成自签名证书(X.509 格式) |
-nodes | 私钥不加密(No DES),否则每次启动 nginx 都要输密码 |
-days 365 | 证书有效期 365 天 |
-newkey rsa:2048 | 同时生成 2048 位 RSA 私钥 |
-keyout server.key | 私钥输出文件 |
-out server.crt | 证书输出文件 |
-subj "/CN=localhost" | 证书主题,CN 是域名/IP,免去交互式输入 |
方式二:分步生成(更灵活)
1. 生成私钥
bash
openssl genrsa -out server.key 20482. 生成证书签名请求(CSR)
方式一:参数指定
bash
openssl req -new -key server.key -out server.csr -subj "/CN=localhost"如果需要填写更多信息: openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=Dev/CN=localhost" 字段含义:C=国家,ST=省份,L=城市,O=组织,OU=部门,CN=域名/IP 实测在windows git bash中执行出现:name is expected to be in the format /type0=value0/type1=value1/type2=... where characters may be escaped by . This name is not in that format: 'C:/Program Files/Git/CN=localhost'problems making Certificate Request 导致只生成了server.key文件,没有生成server.csr文件, 原因暂时不详。在ubuntu中测试无问题。 解决方法,使用交互式或者采用配置文件的方式
方式二:交互式输入 使用交互式模式(交互方式设置-subj)
bash
openssl req -new -key server.key -out server.csr然后根据提示输入:
- Country Name (2 letter code) []: 直接回车或填 CN
- State or Province Name []: 直接回车
- Locality Name []: 直接回车
- Organization Name []: 直接回车
- Organizational Unit Name []: 直接回车
- Common Name (eg, fully qualified host name) []: 输入
localhost - Email Address []: 直接回车
方式三:配置文件 创建openssl.cnf文件,内容如下:
ini
[req]
distinguished_name = req_distinguished_name
prompt = no
[req_distinguished_name]
CN = localhost然后运行:
bash
openssl req -new -key server.key -out server.csr -config openssl.cnf3. 用私钥签发证书
bash
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt