два сертификата с одним и тем же доменным именем - PullRequest
1 голос
/ 06 марта 2012

Я добавил два сертификата в хранилище ключей моего сервера (jboss) с доменным именем в обоих именах как "localhost".Так что теперь, если локальный клиент обращается к серверу, какой из сертификатов будет отправлен клиенту.
В jboss не выдается никакой ошибки, и она работает нормально.Я просто хочу знать, как jboss выбирает, какой сертификат отправлять?

Вывод списка содержимого хранилища доверенных сертификатов, используемого программой Java.

Your keystore contains 2 entries

tomcat, 5 Mar, 2012, trustedCertEntry,
Certificate fingerprint (SHA1): B0:F0:98:5F:E5:D0:D6:24:58:B6:38:07:97:38:95:D5:
AB:28:E1:1E
tomcat1, 6 Mar, 2012, trustedCertEntry,
Certificate fingerprint (SHA1): C4:2B:E8:14:F9:85:5A:05:F2:1F:58:AE:65:FB:0E:8F:
DD:23:97:87


и tomcat, и tomcat1 имеют cn=localhost
Отображение содержимого хранилища ключей, используемого jboss.
Тип хранилища ключей: JKS Поставщик хранилища ключей: SUN

В вашем хранилище ключей есть 2 записи

tomcat, 5 Mar, 2012, PrivateKeyEntry,
Certificate fingerprint (SHA1): B0:F0:98:5F:E5:D0:D6:24:58:B6:38:07:97:38:95:D5:
AB:28:E1:1E
tomcat1, 6 Mar, 2012, PrivateKeyEntry,
Certificate fingerprint (SHA1): C4:2B:E8:14:F9:85:5A:05:F2:1F:58:AE:65:FB:0E:8F:
DD:23:97:87<br>


Отображениезапись хранилища ключей с использованием опции "-v" списка ключей для запроса asper Kevin.

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 2 entries

Alias name: tomcat
Creation date: 5 Mar, 2012
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=localhost
Issuer: CN=localhost
Serial number: 5aaac34c
Valid from: Mon Mar 05 15:04:46 IST 2012 until: Sun Jun 03 15:04:46 IST 2012
Certificate fingerprints:
         MD5:  6A:9D:10:37:4F:98:7F:85:D5:93:95:CC:C3:84:07:D8
         SHA1: B0:F0:98:5F:E5:D0:D6:24:58:B6:38:07:97:38:95:D5:AB:28:E1:1E
         SHA256: FB:F5:BC:9F:17:E9:28:8C:77:1B:40:17:8B:D3:12:71:05:0D:CF:9C
99:00:C4:25:76:46:CE:E0:0C:E6:6B
         Signature algorithm name: SHA256withRSA
         Version: 3

Extensions:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: F6 B3 2E B5 A0 76 78 7E   9D B6 2A D6 4A 6A 8D 96  .....vx...*.Jj..
0010: FA 7D 47 9B                                        ..G.
]
]



*******************************************
*******************************************


Alias name: tomcat1
Creation date: 6 Mar, 2012
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=localhost
Issuer: CN=localhost
Serial number: 4891416
Valid from: Tue Mar 06 06:41:21 IST 2012 until: Mon Jun 04 06:41:21 IST 2012
Certificate fingerprints:
         MD5:  B9:31:FE:75:E9:28:E6:BC:F2:94:60:93:7B:0C:00:63
         SHA1: C4:2B:E8:14:F9:85:5A:05:F2:1F:58:AE:65:FB:0E:8F:DD:23:97:87
         SHA256: 58:7B:D3:A1:2C:8E:C1:C9:26:0A:9F:A1:86:D1:79:76:34:D2:83:6A
88:0C:E1:36:F5:88:3F:DC:F7:D7:89
         Signature algorithm name: SHA256withRSA
         Version: 3

Extensions:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: F1 BF 69 B4 CA D6 9E 72   AC C3 26 9F CD 57 58 7A  ..i....r..&..WXz
0010: 62 19 8B B8                                        b...
]
]



*******************************************
*******************************************

Ответы [ 2 ]

1 голос
/ 21 апреля 2012

По умолчанию JBoss (или Apache Tomcat) будет использовать настройки по умолчанию по умолчанию X509KeyManager, чтобы выбрать, какой сертификат использовать: он выберет первый, найденный в хранилище ключей, который действителен для тип ключа (например, RSA для набора шифров на основе RSA) и во время соединения.

В противном случае, если псевдоним явно указан в keyAlias, он выберет сертификат в этом псевдониме (и потерпит неудачу, если тип ключа неправильный).

Если вместо этого в атрибуте SSLImplementation задано имя пользовательского класса, реализующего SSLImplementation, оно будет использоваться для предоставления SSLSocketFactory (поэтому выбор псевдонима будет быть сделано, однако его SSLContext / KeyManager настроен).

Поддержка индикации имени сервера (SNI), которая позволяет диспетчеру ключей использовать запрошенное имя хоста, чтобы помочь сделать выбор, был представлен только в Java 7 и только на стороне клиента , поэтому JSSE не может использовать его на стороне сервера в настоящее время.

1 голос
/ 06 марта 2012

Чего именно вы пытаетесь достичь? Сертификаты хранятся в хранилище ключей и представляются пользователю на основании совпадения имени хоста. Это неверно, см. Ниже.

Логически говоря, он загрузит только одну из них, которая, в свою очередь, будет предоставлена ​​пользователю.

- Edit -
Попытка упростить, указывая на другую ссылку

  1. Скажем, вы указали "keyAlias" в вашей конфигурации jboss для "tomcat"; тогда псевдоним кота будет подобран
  2. Если вы не укажете псевдоним, то будет использоваться «первый ключ, прочитанный в хранилище ключей»
...