自签名证书,Java,Hudson和JIRA

AFo*_*lia 16 java jira ssl-certificate hudson-plugins

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

java.security.cert.CertificateException: No subject alternative names present
Run Code Online (Sandbox Code Playgroud)

证书的通用名称是"未知",我在证书中看不到任何主题备用名称

$ 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]
Run Code Online (Sandbox Code Playgroud)

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

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

Pas*_*ent 23

主机名来访问您的吉拉服务器(例如jira.acme.comhttps://jira.acme.com/)必须要么匹配的一个CN主题名称的领域,或者当它不,的一个Subject Alternative Name的证书.

这在RFC 2818中有详细说明:

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

在你的情况下,Java抱怨,因为CN("未知")和Subject Alternative Name(因为你没有)都没有匹配你的Jira服务器的主机名.

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

创建密钥对和自签名证书

$ keytool -genkey -alias jira_acme_com -keyalg RSA -keysize 2048 -validity 365 -keystore jira_acme_com.jks
Enter keystore password:  
Re-enter new password: 
What is your first and last name?
  [Unknown]:  jira.acme.com
What is the name of your organizational unit?
  [Unknown]:  Our project
What is the name of your organization?
  [Unknown]:  Our company
What is the name of your City or Locality?
  [Unknown]:  Our town
What is the name of your State or Province?
  [Unknown]:  NJ
What is the two-letter country code for this unit?
  [Unknown]:  US
Is CN=jira.acme.com, OU=Our project, O=Our company, L=Our town, ST=NJ, C=US correct?
  [no]:  y

Enter key password for 
        (RETURN if same as keystore password): 

查看个人信息

$ keytool -list -v -keystore jira_acme_com.jks 
Enter keystore password:  

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: jira_acme_com
Creation date: Sep 4, 2010
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=jira.acme.com, OU=Our project, O=Our company, L=Our town, ST=NJ, C=US
Issuer: CN=jira.acme.com, OU=Our project, O=Our company, L=Our town, ST=NJ, C=US
Serial number: 4c81e9a9
Valid from: Sat Sep 04 10:39:37 CEST 2010 until: Sun Sep 04 10:39:37 CEST 2011
Certificate fingerprints:
     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
     Signature algorithm name: SHA1withRSA
     Version: 3

设置Tomcat以使用密钥库.

当然,如果要创建多宿主证书,则必须使用OpenSSL(keytool不能添加X509扩展名,例如Subject Alternative Name).这些链接是很好的资源:

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

123.123.123.123    Unknown
Run Code Online (Sandbox Code Playgroud)

这样您就可以从这些计算机访问https:// Unknown /.但很明显,这更像是一个肮脏的黑客,而不是一个真正的解决方案,并且不会扩展.

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

资源

参考


Sha*_* D. 1

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

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

当插件在通用名称中找不到正确的主机名时,可能会尝试在主题替代名称中查找它,而当由于没有 subjectAltName 而失败时,您会收到一条错误消息。

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

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

希望这可以帮助。