首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公共及私人知识产权自签署证书(Tomcat 7)

公共及私人知识产权自签署证书(Tomcat 7)
EN

Stack Overflow用户
提问于 2015-11-03 08:46:55
回答 1查看 2.5K关注 0票数 0

我正在配置一个具有公共和私有IP的服务器。它没有任何相关的域名。

使用自签名证书访问下面的URL可以正常工作:

代码语言:javascript
复制
    https://<PUBLIC IP>:8443

但是,当我试图使用它的私有IP访问该服务器时:

代码语言:javascript
复制
    wget https://<PRIVATE IP>:8443

我得到以下错误:

错误:无法验证由‘/C=?/ST=?/L=?/O=?/CN=?/CN=未知’签发的证书:遇到的自签名证书。错误:证书公共名称“未知”与请求的主机名“”不匹配。若要不安全地连接,请使用`--不检查证书‘。

是否有一种方法可以在配置中指定公共和私有IP都应该被接受?

我还尝试在server.xml中包含包含address属性的多个连接器,但它不起作用。

EN

回答 1

Stack Overflow用户

发布于 2015-11-03 09:39:12

您可以使用两个主机(公共和私有IP)创建证书,如下所述:

http://apetec.com/support/GenerateSAN-CSR.htm

用用SubjectAltName配置ssl请求

使用多个域证书,您可以使用一个证书保护更多的域。主题替代名称是一个X509版本3 (RFC 2459)扩展,允许一个SSL证书指定证书应该匹配的多个名称。SubjectAltName可以包含电子邮件地址、IP地址、常规DNS主机名等。这使用了一个名为SubjectAlternativeName (简称SAN )的SSL特性。

生成证书请求文件

对于一般的SSL证书请求(CSR),openssl不需要太多的篡改。由于我们将在CSR中添加一两个SAN,所以我们需要向openssl conf文件添加一些内容。您需要告诉openssl创建包含x509 V3扩展的CSR,还需要告诉openssl在CSR中包含一个主题可选名称列表。

创建一个openssl配置文件,在req部分中启用subject alternative names (openssl.cnf):。这一节告诉openssl如何处理证书请求(CSR)。在该部分中应该有一个以req_extensions开头的行。我们希望这样做如下:

代码语言:javascript
复制
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

这告诉openssl在CSR中包含v3_req部分。现在,我们将深入到v3_req部分,并确保它包括以下内容:

代码语言:javascript
复制
[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = MN
localityName = Locality Name (eg, city)
localityName_default = Minneapolis
organizationalUnitName  = Organizational Unit Name (eg, section)
organizationalUnitName_default  = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max  = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = kb.example.com
DNS.2 = helpdesk.example.org
DNS.3 = systems.example.net
IP.1 = 192.168.1.1
IP.2 = 192.168.69.14

生成一个私钥,您需要确保服务器创建了一个私钥:

代码语言:javascript
复制
openssl genrsa -out san_domain_com.key 2048

创建CSR文件

然后使用以下方法生成CSR:

代码语言:javascript
复制
openssl req -new -out san_domain_com.csr -key san_domain_com.key -config openssl.cnf

系统会提示您提供有关组织的信息,它将询问您是否希望包含密码(您不需要)。然后,在反馈的方式上,它会以什么都不需要的方式结束。但是您可以看到已经创建了san_domain_com.csr。

我们可以使用以下命令查看csr包含的内容:

代码语言:javascript
复制
openssl req -text -noout -in san_domain_com.csr  

您应该会看到如下所示的输出。请注意主题可选名称部分:

代码语言:javascript
复制
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=US, ST=Texas, L=Fort Worth, O=My Company, OU=My Department, CN=server.example
Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit)
Modulus (2048 bit): blahblahblah
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions: X509v3
Basic Constraints: CA:FALSE
X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment
X509v3 Subject Alternative Name: DNS:kb.example.com, DNS:helpdesk.example.com
Signature Algorithm: sha1WithRSAEncryption
blahblahblah 

现在我们有了一份新的社会责任。但是,当然,我们必须签署它。

自我签名和创建证书:

代码语言:javascript
复制
openssl x509 -req -days 3650 -in san_domain_com.csr -signkey san_domain_com.key
 -out san_domain_com.crt-extensions v3_req -extfile openssl.cnf
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33494750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档