Самозаверяющие сертификаты Java, Hudson и JIRA - PullRequest
16 голосов
/ 02 сентября 2010

Я пытаюсь настроить плагин Hudson JIRA.Наш сервер JIRA защищен самозаверяющим сертификатом SSL.Я вставил сертификат, который мой веб-браузер сохранил с помощью команды keytool, и заставил Хадсона найти его.Но теперь он жалуется:

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?

Ответы [ 3 ]

23 голосов
/ 04 сентября 2010

имя хоста , используемое для доступа к вашему серверу Jira (например, jira.acme.com в https://jira.acme.com/) должно совпадать с одним из CN полей имени субъекта или, если нет, одного из Subject Alternative Name сертификата.

Это подробно описано в RFC 2818 :

В некоторых случаях указывается URI в качестве IP-адреса, а не Имя хоста. В этом случае iPAddress subjectAltName должно присутствовать в сертификат и должен точно соответствовать IP в URI.

В вашем случае 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

Чтобы вы могли получить доступ к https://Unknown/ с этих машин. Но очевидно, что это скорее грязный хак, чем реальное решение, и оно не масштабируется.

Связаться с администраторами, чтобы получить настоящий «хороший» сертификат, по-прежнему является действительно хорошим решением.

Ресурсы

Ссылки

1 голос
/ 04 сентября 2010

Если я не ошибаюсь, SSL требует, чтобы общее имя сертификата содержало имя хоста, к которому вы пытаетесь подключиться, чтобы клиентская сторона могла проверить, что сертификат является не просто доверенным в целом, но и довереннымдля местоположения.

Я предполагаю, что вы генерируете сертификат с OpenSSL.Есть ли причина, по которой вы не устанавливаете cn=[yourserver]?

Возможно, что когда он не может найти правильное имя хоста в общем имени, плагин пытается найти его в теме altname, и когда это не удается из-за отсутствия subjectAltName, вы получаете сообщение об ошибке.

В любом случае, если вы используете это для нескольких сайтов, вам нужно иметь имена хостов в subjectAltName.Я нашел сайт, который документирует, как правильно создать свой самоподписанный сертификат.

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

Надеюсь, это поможет.

0 голосов
/ 09 сентября 2010

Существует несколько возможных решений, каждое из которых имеет свой набор проблем.

  • Создание нового сертификата для JIRA, на этот раз с указанием CN при создании пары секретных ключей для сертификата.

    Не могу понять, почему новый сертификат не может быть сгенерирован; Я почти уверен, что другие клиенты JIRA-сервера также сталкиваются с некоторыми проблемами, особенно с предупреждениями браузеров, для описанного сертификата. Поэтому все клиенты (и клиентские приложения) должны быть повторно протестированы, но это не проблема, если самозаверяющий сертификат был выдан локальным центром сертификации, которому доверяют все клиенты.

  • Отредактируйте записи DNS, чтобы поиск «Неизвестно» с сервера Hudson указывал на сервер, на котором установлен JIRA [Я напомнил кому-то, что с некоторыми решениями связаны проблемы :-)]. Это гарантирует, что значение CN, хранящегося в сертификате, совпадает с именем хоста - вам нужно настроить Hudson на использование URL-адреса, например http://Unknown/..... И, о, используйте это, только если вы в очень узком месте; Вы не хотите объяснять, почему вы это сделали.
...