web-dev-qa-db-ja.com

JettyでSSLを構成する

JettyでSSLを構成しようとしています。

私はこれを読みました: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL そしてキーストアを作成しました。

次に、セクション4に直接ジャンプしました。しかし、この構成ファイルはどこにJettyを構成すべきですか?

Jetty.xmlを検索しようとしましたが、私のコンピューターにはそのようなものはありません...

30
Yura

私はそれを機能させるのに多くの問題を抱えていましたが、私はそれを実現する方法をついに知りました。私はJava 7でubuntu 10.04を使用しています。それはウィンドウの下で行うことが可能かもしれませんが、すべてのコマンド行はbashコマンドです。

Jetty 8.1.8を使用しました。 codehaus からダウンロードして、Linux用の.tar.gzファイル(Windows用の.Zip)を選択します。

任意のディレクトリでファイルを解凍します。これは、この記事/回答のために{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}を変更し、jetty-ssl.xmlにあるすべてのパスワードフィールドの「OBF:」を含む難読化されたパスワードを過ぎます。そのように難読化されたパスワードは、人間にとって読みにくいが、プログラムで簡単に解読されることに注意してください。開発者がファイルを編集するときにパスワードを知ることができなくなるだけです。すべての構成ファイルは適切に保護する必要があり、それらのアクセスは可能な限り制限する必要があります。

{jetty} /start.iniを編集して、行#etc/jetty-ssl.xmlのコメントを外します()。

桟橋を開始:

Java -jar start.jar

サーバーの連絡先:https://localhost:8443

できた!

この回答は、jettyでSSLを有効にする簡単な方法であることに注意してください。本番環境で安全にするには、この件についてさらに読む必要があります。

39
formixian

キーストアの経験が豊富になった後、回答が更新されました。このソリューションは、中間証明書(29/07/2015)で完全に機能することを保証します。

注:PEM形式は読み取り可能なファイルを意味し、証明書は---BEGIN CERTIFICATE---で始まり、秘密鍵は-----BEGIN PRIVATE KEY-----行で始まります。

これは、簡単なステップバイステップガイドです。空のディレクトリから始めます。
秘密鍵(PEMエンコードされた.key)がある場合は、手順2に進みます。
証明書署名要求がある場合はステップ3に進みます(PEMエンコードされた.csr)
証明書(PEMエンコードされた.crtまたは.pem)がある場合は、手順4に進みます。

  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)中間証明書を含める必要がある

    中間証明書をダウンロードし、それらを1つのファイルに連結します。順序はルートの下位である必要があります。

    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は1つのエントリのみをリストし、中間証明書はリストしませんが、完全に機能します。

  5. Jettyを構成します。

    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などの他のコンテナでも使用できることに注意してください。幸運を!

24
bekce

Godaddyから年額6ドルで証明書を購入しました。それが続く間、大いに。これらのサイトとJean-Philippe Gravelの回答に基づいて、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

「姓と名」はFQDN(http://なし)でなければならないことに注意してください。私の最初の試みで、私は名と姓を忠実に付けましたが、godaddyは良い警告を受け取って拒否しました。

GodaddyのCSRファイルを生成します。

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

これをGodaddyフォームで送信して、BEGIN/END "NEW CERTIFICATE REQUEST"を含む証明書を作成します。

(Godaddyではサイトを確認する必要があります。これにはいくつかの方法があり、プロキシ経由でドメイン名を購入したので、godaddyで生成されたhtmlページをホストすることで確認が最も簡単で迅速であることがわかりました。)

Godaddyから証明書と中間証明書の両方を含むZipをダウンロードします。選択できるサーバータイプのリストがあります。 「その他」を選択します。次に、証明書を中間証明書と組み合わせます。

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

それに応じて、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-ssl.xmlファイルをロードするようJettyに指示します。

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
s_t_e_v_e

Jettyのデフォルト構成ファイルは$JETTY_HOME/etc/jetty.xmlにあります

Mavenのjettyプラグインを使用している場合、pom.xmlファイルでsslキーストアの詳細を指定する必要があります。 この質問 を参照してください

2
Sorantis

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バージョンを使用して、問題にならないキーストアを生成した場合でも。

1
Nux

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

0
Kalher