Skip to content

Commit

Permalink
SSH Key 和 SSL Key 区别
Browse files Browse the repository at this point in the history
  • Loading branch information
magicianlib committed Jan 14, 2025
1 parent 26def5a commit cce02f4
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 6 deletions.
12 changes: 6 additions & 6 deletions 加密算法/RSA非对称加密算法/RSA密匙对生成.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ $ openssl genrsa -out private_key.pem length

`openssl genrsa` 命令默认生成的是 PEM 格式私钥文件,PEM (Privacy-Enhanced Mail) 是一种常见的密钥和证书格式,它使用 Base64 编码的 ASCII 文本表示密钥和证书,并且通常以 .pem 作为文件扩展名。

需要特别说明说明的一点是,openssl 在 3.0 之前 `openssl genrsa` 命令生成的私钥文件默认使用的是 PKCS#1 标准。但是从 3.0 开始,默认为 PKCS#8 标准。
> 需要特别说明说明的一点是,openssl 在 3.0 之前 `openssl genrsa` 命令生成的私钥文件默认使用的是 PKCS#1 标准。但是从 3.0 开始,默认为 PKCS#8 标准。
如何区分生成的私钥是 PKCS#1 标准还是 PKCS#8 标准呢?只需要打开生成的私钥文件,看开头和结尾内容标识即可:

Expand Down Expand Up @@ -75,7 +75,7 @@ private_key.pem public_key.pem

PKCS#8 格式是一种更通用的私钥格式标准(如果你使用的是 Java、C# 开发语言就需要将私钥转换为 PKCS8 格式),相比 PKCS#1 更加通用,可以表示任意类型的私钥,不仅限于 RSA。

特别说明:<ul>如果你的 openssl 版本大于或等于 3.0,那么生成的私钥本身就是 PKCS#8 标准格式,无需再执行格式转换!</ul>
> **特别说明:** 如果你的 openssl 版本大于或等于 3.0,那么生成的私钥本身就是 PKCS#8 标准格式,无需再执行格式转换!
命令如下:

Expand All @@ -101,7 +101,7 @@ private_key.pem public_key.pem private_key_pkcs8.pem

# DER 和 PEM 格式区别

rsa 密匙对除了 PEM 格式之外,还有 DER 格式。简单地说,他们之间的区别只是内容形式不同。DER 使用二进制编码,文件内容是原始的二进制数据。而 PEM 使用 Base64 编码,文件内容是 Base64 编码的文本。另外:
rsa 密匙对除了 PEM 格式之外,还有 DER 格式。简单地说,他们之间的区别只是内容形式不同。**DER 使用二进制编码,文件内容是原始的二进制数据。而 PEM 使用 Base64 编码,文件内容是 Base64 编码的文本。** 另外:

**可读性**

Expand Down Expand Up @@ -147,15 +147,15 @@ openssl pkcs8 -topk8 -in private_key.pem -outform DER -out private_key_pkcs8.der

**公钥格式标准化**

1、公钥通常采用 X.509 标准,即以 -----BEGIN PUBLIC KEY----- 开头,-----END PUBLIC KEY----- 结尾的 PEM 格式。这已经成为公钥表示的事实标准。
1、公钥通常采用 X.509 标准,即以 -----BEGIN PUBLIC KEY----- 开头,-----END PUBLIC KEY----- 结尾的 PEM 格式。这已经成为公钥表示的事实标准。

2、相比私钥,公钥格式更加统一和简单,不需要像私钥那样有多种不同的表示方式。

**公钥用途单一**
**公钥用途单一**

公钥主要用于加密数据和验证数字签名。它不像私钥那样需要用于解密或生成签名等多种操作。因此公钥的格式要求相对简单,无需像私钥那样有多种表示方式来适应不同的应用场景。

**不涉及敏感信息**
**不涉及敏感信息**

公钥是公开的,不涉及任何敏感信息。因此在使用时不需要像私钥那样需要特殊的安全处理。相比之下,私钥包含了敏感的密钥材料,需要采取更加谨慎的措施进行保护和管理。

Expand Down
77 changes: 77 additions & 0 deletions 加密算法/SSH Key 和 SSL Key 区别.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
`SSH key` 和通过 `OpenSSL` 生成的 `SSL key` 尽管都基于公钥加密技术,但是是两种不同用途的密钥。以下是它们的主要区别和用途:

# SSH Key

**用途:**

用于通过 `SSH(Secure Shell)` 协议进行身份验证和安全通信。

**协议:**

基于 `SSH` 协议。

**典型场景:**

1、登录远程服务器时用于身份验证(无密码登录)。
2、Git 代码托管平台(如 GitHub、GitLab)上的身份验证。

**格式:**

1、常见的 SSH 密钥格式是 `PEM`,使用工具如 `ssh-keygen` 生成。
2、公钥通常保存在 `~/.ssh/id_rsa.pub` 文件中,私钥保存在 `~/.ssh/id_rsa` 文件中。

**加密算法:**

常用算法包括 `RSA``ECDSA``Ed25519` 等。

# SSL Key

**用途:**

用于支持 `TLS/SSL(Transport Layer Security / Secure Sockets Layer)` 协议,保护网络通信的安全性。

**协议:**

基于 `TLS/SSL` 协议。

**典型场景:**

1、为网站配置 HTTPS。
2、在 Web 服务器(如 Apache、Nginx)中用于加密通信。
3、生成服务器证书或客户端证书。

**格式:**

1、生成的密钥文件通常以 `.key``.pem` 结尾。
2、生成后,SSL 密钥常配合证书(如 `.crt``.pem` 文件)使用。

**加密算法:**

1、支持 `RSA``ECDSA``Ed25519` 等。
2、使用工具如 `OpenSSL` 生成私钥:

```bash
openssl genrsa -out server.key 2048
```
3、配合生成证书签名请求(CSR)和证书文件:

```bash
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
```
# 核心区别

| **属性** | **SSH Key** | **SSL Key** |
| --------- | ------------------------------ | -------------- |
| **主要用途** | 身份验证、远程登录 | 安全通信、数据加密 |
| **协议** | SSH | TLS/SSL |
| **生成工具** | ssh-keygen | OpenSSL |
| **文件扩展名** | `.pub` (公钥), 无扩展名或 `.pem` (私钥) | `.key`, `.pem` |
| **加密目标** | 用户身份、访问权限验证 | 加密传输数据、保护通信 |

# **总结**

1、如果你要通过 SSH 远程连接服务器,请使用 `SSH Key`
2、如果你要为网站配置 HTTPS,请使用 `SSL Key`

0 comments on commit cce02f4

Please sign in to comment.