ssl - 我想为我的测试环境创建 SSL 证书

标签 ssl https openssl

有没有人有一个方便的脚本来生成 SSL 证书,以便它生成 CA 证书和服务器证书。更重要的是,以我可以将 CA 证书导入我的(我的 Windows 系统的)受信任根列表的方式创建它,这样浏览器就不会将该站点标记为不受信任。

我使用了以下脚本来执行此操作,但我无法说服我的浏览器信任该证书。 我将不胜感激这里的任何帮助。

# Generate a private key
openssl genrsa -des3 -out server.key 1024

# Generate a CSR (Certificate Signing Request)
openssl req -new -key server.key -out server.csr

# Remove Passphrase from Key
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

# Generating a Self-Signed Certificate
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

问候, 卡夏普

最佳答案

您的脚本只生成一个证书,一个自签名证书。通常,自签名证书称为根证书。这可以用作 CA 证书,但通常会创建中间 CA 证书并由 Root 私钥签名。然后使用此中间 CA 证书签署服务器证书。所以你有这个层次结构:

根 -> CA -> 服务器

CA 和 Root 证书可以进入受信任的证书列表。然后,信任该列表的浏览器也将信任由 CA 或根实体签署的任何证书。

您不必拥有此层次结构...您可以使用根证书作为 CA 并跳过中间证书。您也可以只使用 1 个自签名证书作为根/服务器证书。看这个article (Trusting self-signed certificates) .

但假设您确实有这个层次结构,这里有一些 OpenSSL 命令可以生成必要的 key 和证书:

# 1. Create Root private key
openssl genrsa -out root.key 2048

# 2. Create self-signed Root certificate
openssl req -new -key root.key -x509 -out root.crt -days 5000 -sha256

# 3. Create CA private key
openssl genrsa -out ca.key 2048

# 4. Create CA CSR
openssl req -new -key ca.key -out ca.csr -days 5000

# 5. Sign and create CA certificate
openssl x509 -req -in ca.csr -CA root.crt -CAkey root.key -out ca.crt -set_serial 2 -days 5000 -sha256

# 6. Create Server private key
openssl genrsa -out server.key 2048

# 7. Create Server CSR
openssl req -new -key server.key -out server.csr -days 5000

# 8. Sign and create Server certificate
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -out server.crt -set_serial 3 -days 5000 -sha256

更改 key 位、有效天数、序列号,并根据需要添加 V3 扩展。

还要记住,不同的浏览器有不同的信任列表。 Chrome 和 IE 使用 Windows 默认列表。 Firefox 有自己的列表。

关于ssl - 我想为我的测试环境创建 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16934991/

相关文章:

python - Python SSL : CERTIFICATE_VERIFY_FAILED的系统级解决方案

javascript - 有没有办法在 Ajax 中安全地发送信息?

amazon-web-services - 将 Application Load Balancer 与 HTTPS 结合使用

有时会弹出 SSL 警告

C OpenSSLRSA双重加密失败

c++ - 如何发送 EVP_PKEY 给对方?

java - 将带有 Hibernate 的 Vaadin App 连接到 Azure 上的 MariaDB 时如何使用 SSL 加密

django - 让我们用 uWSGI 加密

python - 为什么我在简单邮件客户端程序上不断收到 SSL 错误?

c - OpenSSL 向具有证书颁发机构的客户端提供服务器证书?