Настроить SSL на Jetty

Я пытаюсь настроить SSL на своем Jetty.

Я прочитал это: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL и создал хранилище ключей.

Затем я перешел непосредственно к разделу 4. Но где этот файл конфигурации, который я должен настроить Jetty?

Я пробовал искать jetty.xml, но на моем компьютере такого нет ...


person Yura    schedule 24.10.2010    source источник
comment
Для тех, кто ищет обновленную документацию, ссылка находится здесь: eclipse.org/ причал / документация / текущий / configuring-ssl.html   -  person Manish Patel    schedule 21.01.2016


Ответы (6)


У меня было много проблем с его работой, но я наконец понял, как это сделать. Я использую ubuntu 10.04 с java 7. Возможно, это можно сделать под Windows, но все строки команд являются командами bash, возможно, можно сделать то же самое с cigwin / mingw

Я использовал Jetty 8.1.8. Загрузите его с codehaus и выберите файл .tar.gz для Linux. (.zip для Windows).

Разархивируйте файл в любой каталог, который вы хотите, это будет ваша домашняя папка {jetty} для этой статьи / ответа.

Перейдите в каталог {jetty} / etc.

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

openssl genrsa -des3 -out jetty.key
openssl req -new -x509 -key jetty.key -out jetty.crt
keytool -keystore keystore -import -alias jetty -file jetty.crt -trustcacerts
openssl req -new -key jetty.key -out jetty.csr
openssl pkcs12 -inkey jetty.key -in jetty.crt -export -out jetty.pkcs12
keytool -importkeystore -srckeystore jetty.pkcs12 -srcstoretype PKCS12 -destkeystore keystore

Теперь вам нужно отредактировать {jetty} /etc/jetty-ssl.xml и настроить свой пароль в соответствии с тем, который вы использовали при создании сертификата. Если вы хотите скрыть свой пароль, вернитесь в командную строку. Перейдите в домашний каталог {jetty} и выполните следующее:

java -cp lib/jetty-util-8.1.8.v20121106.jar org.eclipse.jetty.util.security.Password "{PASSWORD}"

Измените {PASSWORD} на свой фактический пароль, а затем пропустите скрытый пароль, включая «OBF:» во всех полях пароля, найденных в jetty-ssl.xml. Обратите внимание, что подобным образом запутанный пароль трудно прочитать людям, но его легко деобфисковать программно. Это просто не позволяет разработчикам узнать пароль при редактировании файла. Все файлы конфигурации должны быть должным образом защищены, а доступ к ним должен быть максимально ограниченным.

Отредактируйте {jetty} /start.ini и раскомментируйте строку # etc / jetty-ssl.xml (просто удалите #).

Стартовая пристань:

java -jar start.jar

Теперь свяжитесь со своим сервером по адресу: https://localhost:8443

Сделанный!

Обратите внимание, что этот ответ - быстрый способ включить SSL с причалом. Чтобы сделать его безопасным для производства, вам нужно прочитать еще немного по этой теме.

person formixian    schedule 18.01.2013
comment
На последнем шаге я получил ошибку: не удалось расшифровать безопасную запись содержимого: javax.crypto.BadPaddingException: данный последний блок не заполнен должным образом. Решение по ссылке followinmg сработало для меня: stackoverflow.com/questions/9236939/ # Удалить файлы, созданные rm jetty.pkcs12 jetty.csr keystore jetty.crt jetty.key # Повторите все шаги с изменением первого шага, чтобы добавить 2048 в конце, как показано ниже: openssl genrsa -des3 -out jetty.key 2048 Также предложите добавить комментарии к каждому из шаги, чтобы объяснить, что он делает. Спасибо за хорошее решение. - person Farrukh Najmi; 22.05.2013
comment
последние версии причала, по-видимому, не используют start.ini. Вместо этого запустите это: sudo echo /etc/jetty/jetty-ssl.xml ›› /etc/jetty/jetty.conf - person s_t_e_v_e; 10.08.2013
comment
В вашем примере какой из файлов будет truststore? Было бы jetty.pkcs12? - person Michael Black; 03.07.2019
comment
@MichaelBlack, ни один из них. jetty.pkcs12 - открытый ключ (en.wikipedia.org/wiki/PKCS_12). Накопитель тяги находится где-то в JAVA_HOME. Вы можете переопределить это, указав значение при запуске java-приложения с -Djavax.net.ssl.trustStore. См. docs.oracle.com/cd/E19830-01. /819-4712/ablqw/index.html для получения дополнительной информации. - person formixian; 18.07.2019

Ответ обновлен после большего опыта работы с хранилищами ключей. Уверяю вас, это решение отлично работает с промежуточными сертификатами (29.07.2015).

Примечание. Формат PEM означает читаемый файл, сертификаты начинаются с ---BEGIN CERTIFICATE---, а закрытые ключи начинаются со строки -----BEGIN PRIVATE KEY-----.

Вот простое пошаговое руководство. Начните с пустого каталога.
Перейдите к шагу 2, если у вас есть закрытый ключ (ключ с кодировкой PEM).
Перейдите к шагу 3, если у вас есть запрос на подпись сертификата (.csr с кодировкой PEM).
Перейдите к шагу 4 если у вас есть сертификат (в формате PEM .crt или .pem)

  1. Подготовьте закрытый ключ (без пароля).

    openssl genrsa -des3 -passout pass:1 -out domain.pass.key 2048
    openssl rsa -passin pass:1 -in domain.pass.key -out domain.key
    rm domain.pass.key
    
  2. Подготовьте запрос на подпись сертификата (CSR). Мы сгенерируем это, используя наш ключ. Введите соответствующую информацию, когда ее спросят. Обратите внимание на использование -sha256, без него современные браузеры выдадут предупреждение.

    openssl req -key domain.key -sha256 -new -out domain.csr
    
  3. Подготовить сертификат. Выбери один:

    а) Подпишите сами

    openssl x509 -req -days 3650 -in domain.csr -signkey domain.key -out domain.crt
    

    б) Отправьте его в орган

    Ваш провайдер SSL предоставит вам ваш сертификат и их промежуточные сертификаты в формате PEM.

  4. Добавьте в цепочку доверия и упакуйте ее в формат PKCS12. Первая команда устанавливает пароль хранилища ключей для удобства (иначе вам нужно будет ввести пароль несколько раз). Установите другой пароль для безопасности.

    export PASS=LW33Lk714l9l8Iv
    

    Выбери один:

    а) Самозаверяющий сертификат (промежуточные сертификаты не нужны)

    openssl pkcs12 -export -in domain.crt -inkey domain.key -out domain.p12 -name domain -passout pass:$PASS
    keytool -importkeystore -deststorepass $PASS -destkeypass $PASS -destkeystore domain.keystore -srckeystore domain.p12 -srcstoretype PKCS12 -srcstorepass $PASS -alias domain
    

    б) Необходимо включить промежуточные сертификаты

    Загрузите промежуточные сертификаты и объедините их в один файл. Порядок должен быть ниже корневого.

    cat sub.class1.server.ca.pem ca.pem > ca_chain.pem
    

    Используйте параметр -caname для каждого промежуточного сертификата в файле цепочки в соответствии с порядком, в котором они были помещены в файл цепочки.

    openssl pkcs12 -export -in domain.crt -inkey domain.key -out domain.p12 -name domain -passout pass:$PASS -CAfile ca_chain.pem -caname sub1 -caname root -chain
    keytool -importkeystore -deststorepass $PASS -destkeypass $PASS -destkeystore domain.keystore -srckeystore domain.p12 -srcstoretype PKCS12 -srcstorepass $PASS -alias domain
    

    Важное примечание: хотя keytool -list будет отображать только одну запись, а не какие-либо промежуточные сертификаты, он будет работать идеально.

  5. Настроить причал.

    Переместите файл domain.keystore в JETTY_HOME / etc /.

    Выбери один:

    a) Вы используете новую конфигурацию стиля start.ini (Jetty 8+):

    jetty.keystore=etc/domain.keystore
    jetty.truststore=etc/domain.keystore
    jetty.keystore.password=LW33Lk714l9l8Iv
    jetty.keymanager.password=LW33Lk714l9l8Iv
    jetty.truststore.password=LW33Lk714l9l8Iv
    

    б) Вы используете конфигурацию старого стиля с файлами .xml (вам следует перейти на новый стиль!):

    Отредактируйте JETTY_HOME/etc/jetty-ssl.xml файл и измените часть ниже. Замените части пароля, чтобы они соответствовали вашему паролю. Мы не определяем KeyManagerPassword, потому что у нашего ключа нет пароля.

    <Configure id="Server" class="org.eclipse.jetty.server.Server">
      <New id="sslContextFactory" class="org.eclipse.jetty.http.ssl.SslContextFactory">
        <Set name="KeyStore"><Property name="jetty.home" default="." />/etc/keystore</Set>
        <Set name="KeyStorePassword">LW33Lk714l9l8Iv</Set>
        <Set name="TrustStore"><Property name="jetty.home" default="." />/etc/keystore</Set>
        <Set name="TrustStorePassword">LW33Lk714l9l8Iv</Set>
      </New>
      <Call name="addConnector">...</Call>
    </Configure>
    

    Отредактируйте файл start.ini, включив в него файл jetty-ssl.xml.

  6. (Re) стартовый причал.

Обратите внимание, что этот файл хранилища ключей также можно использовать с другими контейнерами, такими как Tomcat. Удачи!

person bekce    schedule 24.04.2014
comment
Я выполнил все эти шаги, но получаю curl localhost:8443/ curl: (52) Empty reply from server Вызов 8080 по-прежнему работает нормально. Есть идеи, что я пропустил? - person Usman Ismail; 23.09.2014

Файл конфигурации по умолчанию для Jetty, расположенный по адресу $JETTY_HOME/etc/jetty.xml.

Если вы используете плагин maven jetty, вам нужно будет указать детали хранилища ключей ssl в вашем файле pom.xml. Дополнительные сведения см. В этом вопросе.

person Sorantis    schedule 24.10.2010
comment
У нас есть файл конфигурации. Мы запускаем сервер, который читает файл конфигурации pcjetty.xml, а затем настраивает и запускает причал (как часть нашего кода Java) - person Yura; 25.10.2010
comment
Я попытался добавить это: раздел wiki.eclipse.org/Jetty/Reference/SSL_Connectors в pcjetty.xml, но при запуске выдает исключение. Я действительно не понимаю, что делает этот раздел, и его нужно настроить ... Не могли бы вы помочь? - person Yura; 25.10.2010
comment
если вы не видите файл jetty.xml в каталоге / etc, попробуйте создать его, возможно, это решит вашу проблему - person Sorantis; 25.10.2010
comment
У меня есть еще один файл (созданный нами) pcjetty.xml. Это файл конфигурации, который читается пристанью, когда я загружаю его из кода. Однако добавление раздела - person Yura; 26.10.2010
comment
‹Назовите имя = addConnector› ‹Arg› ‹Новый класс = org.eclipse.jetty.server.ssl.SslSelectChannelConnector› ‹Установить имя = Порт› 8443 ‹/Set› - person Yura; 26.10.2010
comment
и т.д ... не помогает, есть ошибки. Я искал подробное руководство / объяснение, как настроить jetty.xml (или pcjetty.xml в моем случае) - person Yura; 26.10.2010

Только что купил сертификат у godaddy всего за 6 долларов в год. Отличная сделка, пока длится. Вот шаги, которые я выполнил, чтобы настроить его на Amazon EC2 / Ubuntu / Jetty на основе этих сайтов и ответа Жана-Филиппа Гравеля.

http://docs.codehaus.org/display/JETTY/How+to+configure+SSL

http://community.xmatters.com/docs/DOC-1228#.UgWsI1MU7lc

keytool -keystore keystore -alias jettykey -genkey -keyalg RSA

Обратите внимание, что «Имя и фамилия» должно быть вашим полным доменным именем (без http: //). С первой попытки я послушно поставил свое имя и фамилию, но godaddy сделал хорошие предупреждения и отверг их.

Создайте файл CSR для Godaddy:

keytool -certreq -alias jetty -keystore keystore -file jetty.csr

Отправьте это в форме Godaddy для создания сертификата, включая BEGIN / END «ЗАПРОС НОВОГО СЕРТИФИКАТА».

(Godaddy требует, чтобы вы подтвердили свой сайт. Для этого существует несколько способов, и, поскольку я купил доменное имя через прокси, мне показалось, что проще и быстрее всего проверить, разместив html-страницу, созданную godaddy.)

Загрузите zip-архив с сертификатом и промежуточным сертификатом от godaddy. Существует список типов серверов на выбор. Я выбираю «другое». Затем объедините сертификат с промежуточным сертификатом.

cat mydomain.com.crt gd_bundle.crt > certchain.txt

экспортировать мой закрытый ключ

keytool -importkeystore -srckeystore keystore -destkeystore intermediate.p12 -deststoretype PKCS12
openssl pkcs12 -in intermediate.p12 -out jettykey.pem -nodes

объединить закрытый ключ и сертификат

openssl pkcs12 -export -inkey jettykey.pem -in certchain.txt -out jetty.pkcs12

импортировать сертификат pkcs12 (псевдоним становится 1)

keytool -importkeystore -srckeystore jetty.pkcs12 -srcstoretype PKCS12 -destkeystore keystore

(Я сделал резервную копию хранилища ключей, а затем удалил исходный ключ. Я сделал это во время устранения неполадок, и это может потребоваться, а может и не потребоваться Jetty.)

keytool -delete  -keystore keystore -alias jettykey

sudo cp keystore /usr/share/jetty/etc/

sudo vi /usr/share/jetty/etc/jetty-ssl.xml

Измените свои.store.password, your.key.password и your.trust.password соответственно. Если вы хотите его запутать, используйте

java -cp /usr/share/jetty/lib/jetty.jar:/usr/share/jetty/lib/jetty-util.jar org.mortbay.jetty.security.Password <your.password>

Укажите Jetty, чтобы загрузить файл jetty-ssl.xml.

sudo echo "/etc/jetty/jetty-ssl.xml" >> /etc/jetty/jetty.conf

sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443

(Также измените группу безопасности Amazon EC2, чтобы разрешить 443)

sudo service jetty start
person s_t_e_v_e    schedule 10.08.2013

Если вы работаете с Jetty 9.3, вам следует изменить конфигурацию в start.d/ssl.ini:

jetty.sslContext.keyStorePath=mystore.jks
jetty.sslContext.keyStorePassword=X
jetty.sslContext.keyManagerPassword=X
jetty.sslContext.trustStorePath=mystore.jks
jetty.sslContext.trustStorePassword=X

Где:

  • mystore.jks - это ваш магазин, созданный с помощью keytool
  • X - это ваш пароль в виде обычного текста (я бы рекомендовал пропустить обфускацию, поскольку это дает вам только ложную защиту)

Магазин точно такой же, как и для Tomcat. Даже если вы использовали другую версию Java для создания хранилища ключей, это не должно быть проблемой.

person Nux    schedule 06.04.2016
comment
Всегда нужно вводить пароль при использовании ssl на пристани? (Я собирался попробовать импортировать пару ключей в свои jks, поэтому мне все еще нужно ввести пароль для sslContext, как описано?) - person Gobliins; 29.03.2017
comment
Причал должен знать пароль. В противном случае он не сможет использовать сертификаты для шифрования. - person Nux; 30.03.2017
comment
Извините, это старая ветка, но сталкиваюсь с аналогичным вопросом atm. У меня есть dropwizard (1.3-rc6) - думаю последняя версия. Он поставляется с Jetty, где вы редактируете эти файлы? Я загрузил Jetty локально с помощью brew и знал, что это start.d и другие файлы, но как это влияет на реализацию Jetty, втянутую с зависимостью платформы dropwizard - person DJ2; 09.04.2018
comment
Ну start.d - вот где должна быть ваша конфигурация. Примеры файлов конфигурации находятся в исходной установке причала в демонстрационной базе ... Не уверен, сильно ли они отличаются между версиями / выпусками причала. - person Nux; 11.04.2018

При попытке использовать Jetty в качестве подключаемого модуля Maven в Windows могут помочь следующие шаги:

pom.xml

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.11.v20130520</version>
    <configuration>
        <scanIntervalSeconds>10</scanIntervalSeconds>
        <webApp>
            <contextPath>/yourappcontext</contextPath>
        </webApp>
        <connectors>
            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                <port>9090</port>
                <maxIdleTime>1</maxIdleTime>
            </connector>
            <connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector">
                <port>9443</port>
                <keystore>src/test/resources/keystore</keystore>
                <keyPassword>123456</keyPassword>
                <password>123456</password>
            </connector>
        </connectors>
    </configuration>
</plugin>

Создайте ключ / сертификат с помощью инструмента JDK keytool:

keytool -keystore keystore -alias jetty -genkey -keyalg RSA

Эта команда сгенерирует файл keystore, который нам нужно поместить по следующему (или как вам угодно, пока он не будет настроен в элементе keystore) пути src/test/resources/keystore.

person Kalher    schedule 03.06.2013