Подтвердить что ты не робот

Настройка SSL на Jetty

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

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

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

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

4b9b3361

Ответ 1

У меня было много проблем, заставляя его работать, но я, наконец, не понимаю, как это произошло. Я использую ubuntu 10.04 с java 7. Возможно, это можно сделать под окнами, но все строки команд - это команды 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}"

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

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

Начать причал:

java -jar start.jar

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

Готово!

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

Ответ 2

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

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

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

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

    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
    
  • Подготовить запрос на подпись сертификата (CSR). Мы сгенерируем это с помощью нашего ключа. Введите интересующую вас информацию по запросу. Обратите внимание на использование -sha256, без него, современные браузеры будут генерировать предупреждение.

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

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

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

    b) Отправьте его в орган управления

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

  • Добавьте в цепочку доверия и упакуйте ее в формате 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 будет перечислять только одну запись, а не промежуточные сертификаты, она будет работать отлично.

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

    Переместите файл 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.

  • (Re) начать причал.

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

Ответ 3

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

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

Ответ 4

Просто купил сертификат от godaddy всего за 6 долларов США в год. Очень долго, пока он длится. Ниже приведены шаги, которые я предпринял, чтобы настроить его на Amazon EC2/Ubuntu/Jetty на основе этих сайтов и ответ Jean-Philippe Gravel.

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 "NEW CERTIFICATE REQUEST".

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

Загрузите zip, содержащий сертификат и сертификат посредника от godaddy. Существует список типов серверов на выбор. Я выбираю "другое". Затем объедините cert с сертификатом посредника.

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

import pkcs12 cert (псевдоним становится 1)

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

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

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

Ответ 5

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

Ответ 6

При попытке Windows с Jetty как плагин 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.