2015-11-20 1 views
8

Есть ли способ для ключевого инструмента Java для создания самозаверяющего сертификата с шаблоном в SAN (альтернативное имя темы)? Я использую эту команду, чтобы создать хранилище ключей:Самоподписанный сертификат: компоненты DNSName должны начинаться с буквы

keytool -genkey -alias tomcat -storetype JKS -keyalg RSA -keysize 2048 -ext san=dns:*.example.com -keystore "path/to/my/keystore.jks" -validity 3650 

Но я получаю IOException: DNSName components must begin with a letter

Очевидно, что проблема заключается в SAN *.example.com, но я не вижу другого способа генерации самоподписанного сертификата для example.com субдомены.

Согласно this, это должно быть возможно. Это ошибка в моем синтаксисе, ошибка в keytool, или я что-то не понял?

BTW, я использую Keytool из JDK 1.8 обновления 60

EDIT мне удалось сгенерировать самостоятельно подписанный сертификат для всех example.com поддоменов через Keytool, указав CN=*.example.com, и оставляя SAN пустым. Тем не менее, я оставлю ответ Омикрона принятым (так как это реальный ответ, а не обход ограничений).

ответ

12

Keytool внутренне использует класс sun.security.x509.DNSName для проверки ввода. DNSName обеспечивает синтаксис, указанный в RFC 1034. Цитата из его Javadoc комментария:

имя должно быть в "предпочтительном синтаксисе имени," как указано в RFC 1034.

Предпочтительный синтаксис имени:

<domain> ::= <subdomain> | " " 
<subdomain> ::= <label> | <subdomain> "." <label> 
<label> ::= <letter> [ [ <ldh-str> ] <let-dig> ] 
<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str> 
<let-dig-hyp> ::= <let-dig> | "-" 
<let-dig> ::= <letter> | <digit> 
<letter> ::= any one of the 52 alphabetic characters A through Z in 
upper case and a through z in lower case 
<digit> ::= any one of the ten digits 0 through 9 

Поэтому в соответствии с этим синтаксисом доменные имена должны начинаться с буквы (AZ, az).

Новые RFC (например, RFC 2181, RFC 1123) ослабляют эти ограничения, поэтому это можно считать ошибкой на Java. Есть уже несколько сообщений об ошибках связанных с:

https://bugs.openjdk.java.net/browse/JDK-8016345
https://bugs.openjdk.java.net/browse/JDK-8007706

Итак, ответ нет, в настоящее время нет возможности создать подстановочное расширение SAN с Keytool.

Но для этого вы можете использовать KeyStore Explorer. Это в основном keytool с графическим интерфейсом и не применяет эти ограничения.

+0

Спасибо, я не большой поклонник SF и проектов, размещенных там, поэтому я сначала попробую OpenSSL ... В крайнем случае я буду использовать KeyStore Explorer. Ваш ответ отмечен как принятый. Еще раз спасибо. – zkristic

+1

@zkristic Если вам не нравится SF, вы можете скачать его с GitHub: https://github.com/kaikramer/keystore-explorer/releases – Omikron

+0

Гораздо лучше, спасибо;) – zkristic

 Смежные вопросы

  • Нет связанных вопросов^_^