我正在向嵌入式 Linux 设备添加 HTTPS 支持。我尝试使用以下步骤生成自签名证书:
openssl req -new > cert.csr openssl rsa -in privkey.pem -out key.pem openssl x509 -in cert.csr -out cert.pem -req -signkey key.pem -days 1001 cat key.pem>>cert.pem
这可行,但我遇到了一些错误,例如,谷歌浏览器:
这可能不是您要找的网站! 该站点的安全证书不受信任!
我错过了什么吗?这是构建自签名证书的正确方法吗?
截至 2022 年,OpenSSL ≥ 1.1.1,以下命令可满足您的所有需求,包括主题备用名称 (SAN):
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \ -keyout example.key -out example.crt -subj "/CN=example.com" \ -addext "subjectAltName=DNS:example.com,DNS:www.example.net,IP:10.0.0.1"
在 OpenSSL ≤ 1.1.0 的旧系统上,例如 Debian ≤ 9 或 CentOS ≤ 7,需要使用更长版本的此命令:
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \ -keyout example.key -out example.crt -extensions san -config \ <(echo "[req]"; echo distinguished_name=req; echo "[san]"; echo subjectAltName=DNS:example.com,DNS:www.example.net,IP:10.0.0.1 ) \ -subj "/CN=example.com"
任一命令都会创建一个证书,该证书是
example.com
www.example.net
10.0.0.1
3650
生成以下文件:
example.key
example.crt
所有信息都在命令行中提供。没有让您烦恼的交互式输入。没有配置文件你必须弄乱。所有必要的步骤都由单个 OpenSSL 调用执行:从生成私钥到自签名证书。
由于证书是自签名的,需要用户手动接受,所以使用短过期或弱密码是没有意义的。
将来,您可能希望为 RSA 密钥使用更多4096位,并使用比 更强的哈希算法sha256,但截至 2022 年,这些都是合理的值。它们足够强大,同时受到所有现代浏览器的支持。
4096
sha256
-nodes
从理论上讲,您可以省略-nodes参数(这意味着“没有 DES 加密”),在这种情况下example.key将使用密码进行加密。但是,这对于服务器安装几乎没有用处,因为您要么必须将密码也存储在服务器上,要么必须在每次重新启动时手动输入。