Настроить SSL на Jetty - PullRequest
       28

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

30 голосов
/ 24 октября 2010

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

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

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

Я попытался найти файл jetty.xml, но на моем компьютере его нет ...

Ответы [ 6 ]

39 голосов
/ 19 января 2013

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

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

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

Перейдите в каталог {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}"

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

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

Запустить причал:

java -jar start.jar

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

Готово!

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

24 голосов
/ 24 апреля 2014

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

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

Вот простое пошаговое руководство.Начните с пустой директории.
Перейдите к шагу 2, если у вас есть закрытый ключ (ключ PEM).
Перейдите к шагу 3, если у вас есть запрос на подпись сертификата (код PEM .csr)
Перейдите к шагу 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. Подготовить сертификат.Выберите один:

    a) Подпишите его самостоятельно

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

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

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

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

    export PASS=LW33Lk714l9l8Iv
    

    Выберите один:

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

    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
    

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

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

    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
    

    b) Вы используете старый стильКонфигурация с файлами .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. (Пере) запустить причал.

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

2 голосов
/ 10 августа 2013

Только что купил сертификат у 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://).. С первой попытки я послушно ввел свое имя и фамилию, но у Годадди есть хорошие предупреждения и я их отклонил.

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

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

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

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

Загрузите zip-файл, содержащийи сертификат и промежуточный сертификат от Godaddy. Есть список типов серверов на выбор. Я выбираю «другой». Затем объедините сертификат с промежуточным сертификатом.

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

экспортируйте мой pключ rivate

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

import pkcs12 cert (псевдоним становится 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

Измените соответственно your.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
2 голосов
/ 24 октября 2010

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

Если вы используете плагин maven для Jetty, вам нужно будет указать данные ssl keystore в вашем файле pom.xml.См. этот вопрос для деталей

1 голос
/ 06 апреля 2016

Если вы работаете с 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 для создания хранилища ключей, это не должно быть проблемой.

0 голосов
/ 03 июня 2013

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

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.

...