如何使用OpenSSL生成带有SubjectAltName的自签名证书?

我试图生成一个自签名证书与OpenSSL with SubjectAltName in.While我生成证书的csr,我的猜测是我必须使用OpenSSL x509的v3扩展。
我在用 :

openssl req -new -x509 -v3 -key private.key -out certificate.pem -days 730

有人可以帮我确切的语法吗?

Can someone help me with the exact syntax?

它的三步过程,它涉及修改openssl.cnf文件。你可能能够使用命令行选项,但我不这样做。

找到你的openssl.cnf文件。它可能位于/usr/lib/ssl/openssl.cnf:

$ find /usr/lib -name openssl.cnf
/usr/lib/openssl.cnf
/usr/lib/openssh/openssl.cnf
/usr/lib/ssl/openssl.cnf

在我的Debian系统上,/usr/lib/ssl/openssl.cnf被内置的openssl程序使用。在最近的Debian系统上,它位于/etc/ssl/openssl.cnf

您可以通过向文件添加一个虚假的XXX来确定正在使用的openssl.cnf,并查看openssl chokes。

首先,修改req参数。添加一个alternate_names部分到openssl.cnf,使用您想要使用的名称。没有现有的alternate_names部分,因此您添加它的位置无关紧要。

[ alternate_names ]

DNS.1        = example.com
DNS.2        = www.example.com
DNS.3        = mail.example.com
DNS.4        = ftp.example.com

接下来,将以下内容添加到现有的[v3_ca]部分。搜索确切的字符串[v3_ca]:

subjectAltName      = @alternate_names

您可以在[v3_ca]下将keyUsage更改为以下内容:

keyUsage = digitalSignature, keyEncipherment

digitalSignature和keyEncipherment是服务器证书的标准。不要担心nonRepudiation。它的一个无用的位想到了谁想要成为律师的科学家。这在法律世界中没有意义。

最后,IETF(RFC 5280),浏览器和CA运行快速和松散,所以它可能不重要什么关键用法提供。

二,修改签名参数。在CA_default部分下找到此行:

# Extension copying option: use with caution.
# copy_extensions = copy

并将其更改为:

# Extension copying option: use with caution.
copy_extensions = copy

这确保SAN被复制到证书中。复制dns名称的其他方法被破坏。

第三,生成你的自签名:

$ openssl genrsa -out private.key 3072
$ openssl req -new -x509 -key private.key -sha256 -out certificate.pem -days 730
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
...

最后,检查证书:

$ openssl x509 -in certificate.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9647297427330319047 (0x85e215e5869042c7)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com
        Validity
            Not Before: Feb  1 05:23:05 2014 GMT
            Not After : Feb  1 05:23:05 2016 GMT
        Subject: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (3072 bit)
                Modulus:
                    00:e2:e9:0e:9a:b8:52:d4:91:cf:ed:33:53:8e:35:
                    ...
                    d6:7d:ed:67:44:c3:65:38:5d:6c:94:e5:98:ab:8c:
                    72:1c:45:92:2c:88:a9:be:0b:f9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4
            X509v3 Authority Key Identifier: 
                keyid:34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4

            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation, Key Encipherment, Certificate Sign
            X509v3 Subject Alternative Name: 
                DNS:example.com, DNS:www.example.com, DNS:mail.example.com, DNS:ftp.example.com
    Signature Algorithm: sha256WithRSAEncryption
         3b:28:fc:e3:b5:43:5a:d2:a0:b8:01:9b:fa:26:47:8e:5c:b7:
         ...
         71:21:b9:1f:fa:30:19:8b:be:d2:19:5a:84:6c:81:82:95:ef:
         8b:0a:bd:65:03:d1
http://stackoverflow.com/questions/21488845/how-can-i-generate-a-self-signed-certificate-with-subjectaltname-using-openssl


转载出处:如何使用OpenSSL生成带有SubjectAltName的自签名证书?

<think>嗯,用户想了解如何用OpenSSL生成证书。首先,我需要回忆一下OpenSSL的基本用法和相关命令。记得OpenSSL可以用来生成私钥、证书签名请求(CSR)以及自签名证书。不过具体步骤可能得一步步来。 首先,用户可能需要生成一个私钥。通常用RSA算法的话,命令应该是openssl genpkey或者openssl genrsa。不过不同版本的OpenSSL可能命令有所区别。比如,旧版本可能用genrsa,而新版本推荐用genpkey。这里得确认正确的参数,比如算法、密钥长度、输出文件等。 然后,生成CSR的时候需要用到私钥,并且需要填写一些信息,比如国家、省份、组织名称等。这里可能需要用户交互式输入,或者使用-subj参数来指定主题,避免交互。需要注意-subj的格式是否正确,比如用斜杠分隔各个字段。 接下来,如果是自签名证书,可以直接用私钥生成自签名的证书,而不用经过CA。这时候需要指定有效期、扩展用途等。比如,服务器证书可能需要设置subjectAltName,特别是如果用于本地开发,可能需要包含DNS名称或IP地址。 另外,用户可能需要了解如何验证生成的证书和CSR,比如用openssl x509或openssl req命令查看内容,确保信息正确。 可能还需要考虑不同的用例,比如测试环境用自签名证书,而生产环境可能需要通过CSR向公共CA申请签名。这时候生成的CSR需要提交给CA,然后获取签发的证书。 需要注意用户是否有特定需求,比如密钥类型(RSA、ECC)、密钥长度、证书有效期等。如果没有特别说明,默认参数可能就够用了,但最好在步骤中提及这些可配置的选项,让用户知道可以调整。 还有,在生成自签名证书的时候,是否需要添加扩展项?比如v3扩展,设置密钥用途为服务器认证,或者添加主题备用名称。这可能对于现代浏览器来说很重要,否则证书可能不被信任。 另外,常见问题可能包括权限问题,生成的私钥需要设置合适的权限保护,比如600模式。还有,证书格式是否正确,是否需要转换为其他格式(如PEM、DER等),但用户的问题可能暂时不需要涉及这些。 总结步骤应该是:生成私钥 -> 生成CSR(可选)-> 生成自签名证书或通过CA签发。根据用户需求,分两种情况:自签名和CSR申请。需要详细说明每个步骤的命令和参数,确保用户能正确执行。 另外,需要提醒用户注意安全,私钥必须保密,不能泄露。在生成过程中,如果需要密码保护私钥,可以使用加密选项,但可能会增加复杂度,用户可能需要权衡便利性和安全性。 可能还需要给出示例命令,让用户可以直接复制粘贴,替换自己的参数。比如替换域名、组织名称等。同时,验证生成的证书是否正确,如何用OpenSSL命令查看证书内容。 最后,检查是否有遗漏的步骤,比如在生成CSR后,如何提交给CA,这部分可能不需要详细说明,但可以提及。重点放在用户自己生成证书的过程,特别是自签名的情况,因为这是常见需求,比如用于测试HTTPS服务器。</think>好的,下面分步骤介绍用 OpenSSL 生成证书的流程,包含自签名证书和通过证书签名请求(CSR)申请的证书两种场景: --- ### **一、生成自签名证书(用于测试)** #### **1. 生成私钥** ```bash openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048 ``` - 说明:生成 2048 位的 RSA 私钥,保存为 `private.key`。 #### **2. 直接生成自签名证书** ```bash openssl req -new -x509 -key private.key -out certificate.crt -days 365 ``` - 按提示输入证书信息(国家、省份、组织等)。 - `-days 365` 表示有效期 1 年,可自定义。 #### **3. 验证证书** ```bash openssl x509 -in certificate.crt -text -noout ``` --- ### **二、通过 CSR 申请证书(需 CA 签名)** #### **1. 生成私钥(同上)** ```bash openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048 ``` #### **2. 生成证书签名请求(CSR)** ```bash openssl req -new -key private.key -out request.csr ``` - 按提示填写证书信息(需与最终域名匹配)。 #### **3. 提交 CSR 到 CA** - 将 `request.csr` 发送给证书颁发机构(如 Let's Encrypt、DigiCert 等)。 - CA 会返回签名后的证书(如 `signed.crt`)。 #### **4. 验证 CSR** ```bash openssl req -in request.csr -text -noout ``` --- ### **三、高级用法** #### **1. 生成带 SAN 的证书(适用于多域名/IP)** 创建配置文件 `san.cnf`: ```ini [req] distinguished_name = req_distinguished_name req_extensions = v3_req [req_distinguished_name] countryName = CN stateOrProvinceName = Beijing organizationName = MyOrg [v3_req] subjectAltName = @alt_names [alt_names] DNS.1 = example.com IP.1 = 192.168.1.1 ``` 生成命令: ```bash openssl req -new -x509 -key private.key -out certificate.crt -days 365 -config san.cnf ``` #### **2. 生成 ECC 私钥(更高效)** ```bash openssl genpkey -algorithm EC -out ecc.key -pkeyopt ec_paramgen_curve:P-256 ``` --- ### **四、注意事项** 1. **私钥安全**:私钥文件(如 `.key`)必须严格保密。 2. **有效期**:自签名证书需定期更新,生产环境建议使用 CA 签发。 3. **兼容性**:若需浏览器信任,需通过公共 CA 申请证书。 有问题可提供具体场景,我会进一步补充细节!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值