# OpenSSL 命令生成器：CSR、格式转换、s_client

> 填表生成正确的 OpenSSL 命令：私钥和带 SAN 的 CSR、自签名证书、PEM/DER/PFX/P7B 转换、私钥匹配、s_client 和 STARTTLS 测试。

Source: https://ssl.sh/zh/tools/openssl-command-generator/
Last updated: 2026-11-10

选任务、填名字，直接得到能运行的 OpenSSL 命令，并标注 OpenSSL 3 的差异。

OpenSSL 命令生成器把一张小表单变成正确的 `openssl` 命令。选一个任务，比如“新私钥 + 带 SAN 的 CSR”或“PFX → PEM”，填上域名和文件名，复制命令。输入时命令会实时更新。

## 怎么用

1. 从列表里选任务，分为私钥/CSR/证书、查看和验证、格式转换、测试服务器四组。
2. 填出现的字段：域名、其他 SAN、文件名、主机和端口。
3. 复制命令，在服务器终端里执行。

例如为两个域名生成 ECDSA 私钥和 CSR：

```bash
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 -nodes \
  -keyout example.com.key -out example.com.csr -subj /CN=example.com \
  -addext subjectAltName=DNS:example.com,DNS:www.example.com
```

## 支持的任务

- **私钥和证书**：RSA、ECDSA 私钥，带 SAN 的 CSR，用已有私钥生成 CSR，自签名证书。
- **查看**：证书和 CSR 详情、到期时间（本地文件或线上服务器）、指纹和 SPKI pin、验证证书链、证书/私钥/CSR 是否匹配。
- **转换**：PEM ↔ DER、PEM + 私钥 → PFX（含兼容模式）、PFX → PEM、P7B → PEM。
- **测试服务器**：带 SNI 的 `s_client`、SMTP/IMAP/POP3/FTP/XMPP/PostgreSQL 的 STARTTLS、TLS 1.0–1.3 支持情况、TLSA 哈希。

## 版本差异

- `-addext` 从 OpenSSL 1.1.1 开始才有。CentOS 7 这类老系统要把 SAN 写进配置文件。
- `-nodes` 表示私钥不加密，Web 服务器需要这样；OpenSSL 3 也可以写 `-noenc`。
- OpenSSL 3 生成的 PFX 默认用 AES-256 和 HMAC-SHA256，Windows Server 2016、Java 8 需要 3DES/SHA-1 兼容参数。
- 不想敲命令，可以直接用浏览器里的 [CSR 生成器](https://ssl.sh/zh/tools/csr-generator/)、[证书格式转换](https://ssl.sh/zh/tools/ssl-converter/)和[私钥匹配](https://ssl.sh/zh/tools/key-matcher/)。


## FAQ

**openssl pkcs12 报 unsupported 或提到 RC2，怎么办？**

OpenSSL 3 把 RC2 等老算法挪到了 legacy provider，读取旧 PFX 时加 -legacy。要给老版 Windows 或 Java 生成 PFX，用 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -macalg sha1。

**怎么看自己的 OpenSSL 版本？**

执行 openssl version。CentOS 7 自带的是 1.0.2，不支持 -addext 和 TLS 1.3；Ubuntu 22.04 及以后、Debian 12 及以后带的是 OpenSSL 3。

**s_client 执行后卡住不动？**

s_client 握手后在等输入。像生成的命令那样加 </dev/null，或者用 echo | openssl s_client ...，打印完证书就会退出。
