2、OpenSSL入门:安装、配置与自签名证书

好,咱们正式开始动手了。这一章我带你搞定 OpenSSL——这个加密世界里最常用的工具箱。说白了,后面所有加密通道的搭建,都离不开它。

我记得刚入行那会儿,第一次配 OpenSSL 就被各种参数搞晕了。什么 PEM、DER、CSR、CRT……一堆缩写看得头疼。但后来我发现,只要把核心流程走一遍,这东西其实没那么玄乎。

2.1 安装 OpenSSL

不同系统安装方式不一样,我列个表,你对着自己的环境来就行。

操作系统 安装命令 备注
Ubuntu/Debian sudo apt install openssl 一般系统自带,检查版本即可
CentOS/RHEL sudo yum install openssl 或者用 dnf
macOS brew install openssl Homebrew 装完记得看路径提示
Windows 下载安装包或 WSL 我个人建议用 WSL,省心

装完之后,先跑一句验证一下:

openssl version

如果看到类似 OpenSSL 3.0.2 的输出,说明装好了。嗯,这里要注意:版本 1.1.1 和 3.x 在命令上基本兼容,但 3.x 对旧算法支持更严格,后面我会提到。

2.2 配置文件在哪?

OpenSSL 的行为很大程度上靠配置文件控制。默认路径一般是 /etc/ssl/openssl.cnf(Linux)或 /usr/local/etc/openssl@3/openssl.cnf(macOS)。

你可以先看一眼:

cat /etc/ssl/openssl.cnf | head -30

里面定义了 CA 目录、证书策略、扩展属性等等。说实话,大部分场景下你不需要改它,但知道它在哪很重要——我曾经有一次折腾了半天证书签不下来,最后发现是配置文件里 dir 路径写错了。

小技巧: 如果你不想动系统配置文件,可以自己建一个迷你版 .cnf,只包含当前项目需要的字段。后面生成证书时用 -config 参数指定就行。

2.3 生成自签名证书

这是本章的核心操作。自签名证书,说白了就是自己给自己当 CA,签发的证书没有第三方信任,但用于内部测试或开发环境完全够用。

流程分两步:先生成私钥,再生成证书。我习惯一步到位:

openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes

解释一下每个参数:

  • req:证书请求和生成工具
  • -x509:直接输出自签名证书,而不是生成 CSR
  • -newkey rsa:2048:同时生成新私钥,RSA 2048 位
  • -keyout server.key:私钥输出文件
  • -out server.crt:证书输出文件
  • -days 365:有效期一年
  • -nodes:私钥不加密(开发环境方便,生产环境别这么干)

执行后,系统会问你一堆信息:国家、省份、公司名、通用名等等。其中 Common Name 最重要——必须填你的域名或 IP,否则浏览器会报域名不匹配。

避坑指南: 我曾经给一个内部服务配 HTTPS,Common Name 填了 localhost,结果客户端用 IP 访问时死活连不上。后来改成 IP 地址才解决。记住:Common Name 必须和客户端实际访问的地址一致。

2.4 查看证书信息

证书生成完了,怎么确认里面内容对不对?用这个命令:

openssl x509 -in server.crt -text -noout

输出会很长,我挑几个关键字段说说:

  • Subject:证书持有者信息,就是你刚才填的那些
  • Issuer:签发者,自签名证书里 Subject 和 Issuer 一样
  • Not Before / Not After:有效期起止时间
  • Public Key Algorithm:公钥算法,比如 rsaEncryption
  • Signature Algorithm:签名算法,比如 sha256WithRSAEncryption

你还可以单独提取公钥或指纹:

# 查看公钥
openssl x509 -in server.crt -pubkey -noout

# 查看 SHA256 指纹
openssl x509 -in server.crt -fingerprint -sha256 -noout

指纹这东西,在验证证书是否被篡改时特别有用。我一般在部署后,会对比本地和服务器上的指纹是否一致。

2.5 核心流程一览

下面这张图把 OpenSSL 生成自签名证书的完整流程串起来了,你一看就明白。

自签名证书生成流程 安装 OpenSSL 准备配置文件 生成私钥+证书 查看证书信息 提取公钥 / 指纹 部署到服务 说明: 自签名证书适合开发/测试环境,生产环境建议使用受信任的 CA 签发。 私钥文件(.key)必须妥善保管,泄露等于证书作废。 Common Name 必须与客户端访问的域名或 IP 一致。

2.6 常见问题与避坑

私钥权限: 私钥文件一旦泄露,别人就能冒充你的服务。记得设置 600 权限:chmod 600 server.key。我见过有人把私钥传到 GitHub 上,那场面……嗯,不说了。
证书格式转换: 不同平台要求不同格式。比如 Java 用 JKS,Windows 用 PFX。OpenSSL 可以轻松转换:
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pfx

还有一个常见问题:浏览器访问自签名证书时会提示不安全。这是正常的,因为浏览器不信任你的自签名 CA。你可以选择「继续访问」,或者把证书导入到系统信任列表里。具体操作各系统不一样,这里不展开。

好了,这一章的内容就到这。你只要把安装、生成证书、查看信息这三步走一遍,后面搭建加密通道时就会顺手很多。