16

我正在尝试设置 Hudson JIRA 插件。我们的 JIRA 服务器使用自签名 SSL 证书进行保护。我已经使用 keytool 命令插入了我的网络浏览器存储的证书,并让 Hudson 找到它。但现在它抱怨:

java.security.cert.CertificateException: No subject alternative names present

证书的通用名称是“未知”,我在证书中看不到任何主题替代名称

$ openssl x509 -in Unknown -text -noout
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number: 1214507595 (0x4863ea4b)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=US, ST=NJ, L=[Our town], O=[Our company], OU=[Our project], CN=Unknown
        Validity
            Not Before: Jun 26 19:13:15 2008 GMT
            Not After : May  5 19:13:15 2018 GMT
        Subject: C=US, ST=NJ, L=[Our town], O=[Our company], OU=[Our project], CN=Unknown
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                [omitted]
    Signature Algorithm: md5WithRSAEncryption
        [omitted]

(识别信息已编辑并在括号中注明。)

有没有办法将主题备用名称附加到此证书?还是有其他方法?还是我被迫破解 Hudson Jira 插件?

4

3 回答 3

23

用于访问 Jira 服务器的主机名(例如https://jira.acme.com/中 的jira.acme.com)必须匹配主题名称的字段之一,或者如果不匹配,则匹配以下字段之一证书。CNSubject Alternative Name

这在RFC 2818中有详细说明:

在某些情况下,URI 被指定为 IP 地址而不是主机名。在这种情况下,iPAddress subjectAltName 必须出现在证书中,并且必须与 URI 中的 IP 完全匹配。

在您的情况下,Java 正在抱怨,因为CN("Unknown") 和 a Subject Alternative Name(因为您没有) 都与您的 Jira 服务器的主机名不匹配。

因此,要么使用适当的 生成证书CN,例如使用keytool

创建密钥对和自签名证书

$ keytool -genkey -alias jira_acme_com -keyalg RSA -keysize 2048 -validity 365 -keystore jira_acme_com.jks
输入密钥库密码:  
重新输入新的密码:
你的名字和姓氏是什么?
  [未知]:jira.acme.com
您的组织单位的名称是什么?
  [未知]:我们的项目
您的组织名称是什么?
  [未知]:我们公司
您所在城市或地区的名称是什么?
  [未知]:我们的小镇
您所在的州或省的名称是什么?
  [未知]:新泽西州
本机的两个字母的国家/地区代码是什么?
  [未知]:美国
CN=jira.acme.com, OU=Our project, O=Our company, L=Our town, ST=NJ, C=US 是否正确?
  [否]:是

输入密钥密码
        (如果与密钥库密码相同,则返回):

查看个人信息

$ keytool -list -v -keystore jira_acme_com.jks
输入密钥库密码:  

密钥库类型:JKS
密钥库提供者:SUN

您的密钥库包含 1 个条目

别名:jira_acme_com
创建日期:2010年9月4日
条目类型:PrivateKeyEntry
证书链长:1
证书[1]:
Owner: CN=jira.acme.com, OU=Our project, O=Our company, L=Our town, ST=NJ, C=US
发行人:CN=jira.acme.com, OU=Our project, O=Our company, L=Our town, ST=NJ, C=US
序列号:4c81e9a9
有效期:2010 年 9 月 4 日星期六 10:39:37 CEST 至:2011 年 9 月 4 日星期日 10:39:37 CEST
证书指纹:
     MD5: 15:6A:E3:14:E2:78:F4:95:41:E6:33:C9:F8:8B:64:23
     SHA1:CD:A6:9A:84:18:E8:62:50:2C:DC:2F:89:22:F6:BA:E9:1A:63:F6:C6
     签名算法名称:SHA1withRSA
     版本:3

设置 Tomcat以使用密钥库。

其中,如果要创建多宿主证书,则必须使用 OpenSSL(keytool 无法添加 X509 扩展名,例如 Subject Alternative Name)。这些链接是极好的资源:

更新:鉴于您无法更改证书(您确实应该提到这一点),临时解决方案可能是更改/etc/hosts所需机器的本地文件以解析Unknown为机器的真实 IP。

123.123.123.123    Unknown

这样您就可以从这些机器访问https://Unknown/ 。但显然,这更像是一种肮脏的黑客攻击,而不是真正的解决方案,而且无法扩展。

联系管理员以获得真正的“好”证书仍然是真正好的解决方案。

资源

参考

于 2010-09-04T07:26:32.997 回答
1

如果我没记错的话,SSL 要求证书的公用名包含您尝试连接的主机名,这样客户端就可以验证证书不仅在一般情况下是受信任的,而且在该位置上是受信任的.

我假设您正在使用 OpenSSL 生成证书。你有没有设置的原因cn=[yourserver]

可能是当它无法在公用名中找到正确的主机名时,插件会尝试在主题 alt 名称中查找它,并且当由于没有 subjectAltName 而失败时,您会收到一条错误的错误消息.

无论如何,如果您将其用于多个站点,则需要在 subjectAltName 中包含主机名。我找到了一个记录如何正确创建自签名证书的网站。

http://library.linode.com/ssl-guides/subject-alt-name-ssl

希望这可以帮助。

于 2010-09-04T04:03:39.673 回答
0

有几种可能的解决方案,每一种都有自己的痛点。

  • 为 JIRA 生成一个新证书,这一次在为证书生成密钥对时指定一个 CN。

    我不明白为什么无法生成新证书;我很确定 JIRA 服务器的其他客户端也遇到了一些问题,尤其是来自浏览器的警告,用于描述的证书。因此,所有客户端(和客户端应用程序)都必须重新测试,但如果自签名证书是由所有客户端信任的本地 CA 颁发的,那么这并不麻烦。

  • 编辑 DNS 条目以确保从 Hudson 服务器对“未知”的查找指向安装 JIRA 的服务器 [我确实提醒过一些人与某些解决方案相关联的痛苦 :-) ]。这可确保证书中存储的 CN 值与主机名匹配 - 您需要将 Hudson 配置为使用类似http://Unknown/..... 哦,仅当您处于非常紧张的位置时才使用它;你不想解释你为什么这样做。
于 2010-09-09T12:28:46.257 回答