2010-09-25 15 views
12

me gustaría utilizar SSL/HTTPS como se describe en¿Cómo se usa https/ssl con Maven/Mortbay Jetty Plugin?

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

usando embarcadero-maven-plugin, pero no sé cómo configurar el plugin. Cualquier pista, ejemplo, tutorial, tutorial?

Además, me pregunto cómo llevar a cabo el Paso 3b del tutorial mencionado anteriormente, donde es necesario manipular el servidor de embarcadero (java -classpath $JETTY_HOME/lib/jetty-util-6.1-SNAPSHOT.jar:$JETTY_HOME/lib/jetty-6.1-SNAPSHOT.jar org.mortbay.jetty.security.PKCS12Import jetty.pkcs12 keystore).

+0

Aquí es el único trabajo, claro paso a paso que he encontrado para embarcadero 9: http://juplo.de/configure-https-for-jetty -maven-plugin-9-0-x/# comment-53352 – mtyson

Respuesta

24

Puede usar Maven para crear un certificado de desarrollo y usarlo al iniciar Jetty. En primer lugar, configurar la herramienta de claves -maven-plugin de para crear un certificado de desarrollo:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>keytool-maven-plugin</artifactId> 
    <executions> 
    <execution> 
     <phase>generate-resources</phase> 
     <id>clean</id> 
     <goals> 
     <goal>clean</goal> 
     </goals> 
    </execution> 
    <execution> 
     <phase>generate-resources</phase> 
     <id>genkey</id> 
     <goals> 
     <goal>genkey</goal> 
     </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <keystore>${project.build.directory}/jetty-ssl.keystore</keystore> 
    <dname>cn=my.hostname.tld</dname><!-- put your CN here--> 
    <keypass>jetty6</keypass> 
    <storepass>jetty6</storepass> 
    <alias>jetty6</alias> 
    <keyalg>RSA</keyalg> 
    </configuration> 
</plugin> 

Cambiar la CN como desee. A continuación, configurar el experto -embarcadero-plugin utilizar el certificado de desarrollo:

<plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 
    <version>6.1.10</version> 
    <configuration> 
    <contextPath>/context</contextPath> 
    <scanIntervalSeconds>5</scanIntervalSeconds> 
    <connectors> 
     <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> 
     <port>8080</port> 
     <maxIdleTime>60000</maxIdleTime> 
     </connector> 
     <connector implementation="org.mortbay.jetty.security.SslSocketConnector"> 
     <port>8443</port> 
     <maxIdleTime>60000</maxIdleTime> 
     <keystore>${project.build.directory}/jetty-ssl.keystore</keystore> 
     <password>jetty6</password> 
     <keyPassword>jetty6</keyPassword> 
     </connector> 
    </connectors> 
    </configuration> 
</plugin> 

Run mvn jetty:run y abierto https://localhost:8443/context.

+0

Pascal, usted * es * un poco de una maravilla ... otra vez gracias mucho! –

+0

@ user268098 De nada. Me alegro de que te haya gustado esta respuesta. –

+0

+1 ¡Excelente respuesta!¿Diría que las configuraciones de Jetty también se pueden usar con el complemento de carga con Jetty? –

10

En caso de que se obtiene este error utilizando la solución de Pascal: -

Could not find goal 'genkey' in plugin org.codehaus.mojo:keytool-maven-plugin:1.3 
  1. Uso 'generateKeyPair' como el objetivo. (genKey está en desuso, creo.)
  2. Agregue la versión del complemento.

La definición del plugin debe verse como: -

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>keytool-maven-plugin</artifactId> 
      <version>1.3</version> 
      <executions> 
       <execution> 
        <phase>generate-resources</phase> 
        <id>clean</id> 
        <goals> 
         <goal>clean</goal> 
        </goals> 
       </execution> 
       <execution> 
        <phase>generate-resources</phase> 
        <id>genkey</id> 
        <goals> 
         <goal>generateKeyPair</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <keystore>${project.build.directory}/jetty-ssl.keystore</keystore> 
       <dname>cn=my.hostname.tld</dname><!-- put your CN here --> 
       <keypass>jetty6</keypass> 
       <storepass>jetty6</storepass> 
       <alias>jetty6</alias> 
       <keyalg>RSA</keyalg> 
      </configuration> 
     </plugin> 
3

En caso de que quiera hacerlo utilizando embarcadero 9, tenga en cuenta que desde el embarcadero-9.0 ya no es posible configurar un conector HTTPS directamente en el pom.xml: necesita usar los archivos de configuración de jetty xml para hacerlo.[1].

Aquí es un ejemplo:

pom.xml

<properties> 
<jetty-version>9.1.2.v20140210</jetty-version> 
</properties> 
... 
<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-server</artifactId> 
    <version>${jetty-version}</version> 
</dependency> 
... 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>keytool-maven-plugin</artifactId> 
      <version>1.3</version> 
      <executions> 
       <execution> 
        <phase>generate-resources</phase> 
        <id>clean</id> 
        <goals> 
         <goal>clean</goal> 
        </goals> 
       </execution> 
       <execution> 
        <phase>generate-resources</phase> 
        <id>genkey</id> 
        <goals> 
         <goal>generateKeyPair</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <keystore>${project.build.directory}/jetty-ssl.keystore</keystore> 
       <dname>cn=127.0.0.1</dname><!-- put your CN here --> 
       <keypass>dypBdX1NB3gXA0DXCy9nfyJ4jqUDlaydgbo9OU12g</keypass> 
       <storepass>dypBdX1NB3gXA0DXCy9nfyJ4jqUDlaydgbo9OU12g</storepass> 
       <alias>jetty</alias> 
       <keyalg>RSA</keyalg> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>${jetty-version}</version> 
      <configuration> 
       <jettyXml>src/main/resources/jetty.xml,src/main/resources/jetty-ssl.xml,src/main/resources/jetty-https.xml</jettyXml> 
      </configuration> 
     </plugin>  

embarcadero-https.xml

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> 
<Configure id="Server" class="org.eclipse.jetty.server.Server"> 
    <Call id="httpsConnector" name="addConnector"> 
    <Arg> 
     <New class="org.eclipse.jetty.server.ServerConnector"> 
     <Arg name="server"><Ref refid="Server" /></Arg> 
     <Arg name="factories"> 
      <Array type="org.eclipse.jetty.server.ConnectionFactory"> 
      <Item> 
       <New class="org.eclipse.jetty.server.SslConnectionFactory"> 
       <Arg name="next">http/1.1</Arg> 
       <Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg> 
       </New> 
      </Item> 
      <Item> 
       <New class="org.eclipse.jetty.server.HttpConnectionFactory"> 
       <Arg name="config"><Ref refid="sslHttpConfig"/></Arg> 
       </New> 
      </Item> 
      </Array> 
     </Arg> 
     <Set name="host"><Property name="jetty.host" /></Set> 
     <Set name="port"><Property name="jetty.https.port" default="8443" /></Set> 
     <Set name="idleTimeout">30000</Set> 
     </New> 
    </Arg> 
    </Call> 
</Configure> 

embarcadero-ssl.xml

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> 

<!-- ============================================================= --> 
<!-- Configure a TLS (SSL) Context Factory       --> 
<!-- This configuration must be used in conjunction with jetty.xml --> 
<!-- and either jetty-https.xml or jetty-spdy.xml (but not both) --> 
<!-- ============================================================= --> 
<Configure id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory"> 
    <Set name="KeyStorePath"><Property name="jetty.home" default="." />/<Property name="jetty.keystore" default="target/jetty-ssl.keystore"/></Set> 
    <Set name="KeyStorePassword"><Property name="jetty.keystore.password" default="dypBdX1NB3gXA0DXCy9nfyJ4jqUDlaydgbo9OU12g"/></Set> 
    <Set name="KeyManagerPassword"><Property name="jetty.keymanager.password" default="dypBdX1NB3gXA0DXCy9nfyJ4jqUDlaydgbo9OU12g"/></Set> 
    <Set name="TrustStorePath"><Property name="jetty.home" default="." />/<Property name="jetty.truststore" default="target/jetty-ssl.keystore"/></Set> 
    <Set name="TrustStorePassword"><Property name="jetty.truststore.password" default="dypBdX1NB3gXA0DXCy9nfyJ4jqUDlaydgbo9OU12g"/></Set> 
    <Set name="EndpointIdentificationAlgorithm"></Set> 
    <Set name="ExcludeCipherSuites"> 
    <Array type="String"> 
     <Item>SSL_RSA_WITH_DES_CBC_SHA</Item> 
     <Item>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</Item> 
    </Array> 
    </Set> 

    <!-- =========================================================== --> 
    <!-- Create a TLS specific HttpConfiguration based on the  --> 
    <!-- common HttpConfiguration defined in jetty.xml    --> 
    <!-- Add a SecureRequestCustomizer to extract certificate and --> 
    <!-- session information           --> 
    <!-- =========================================================== --> 
    <New id="sslHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration"> 
    <Arg><Ref refid="httpConfig"/></Arg> 
    <Call name="addCustomizer"> 
     <Arg><New class="org.eclipse.jetty.server.SecureRequestCustomizer"/></Arg> 
    </Call> 
    </New> 

</Configure> 

jetty.xml

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 
<Configure id="Server" class="org.eclipse.jetty.server.Server"> 
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration"> 
<Set name="secureScheme">https</Set> 
<Set name="securePort"> 
    <Property name="jetty.secure.port" default="8443" /> 
</Set> 
</New> 
</Configure> 
+0

Esto se acerca mucho, pero obtengo: [ERROR] 1) No se realizó ninguna implementación para org.codehaus.mojo.keytool.KeyToolCommandLineBuilder. [ERROR] al ubicar org.codehaus.mojo.keytool.DefaultKeyTool - alguna idea? – RockMeetHardplace

+0

Y como de costumbre, respondo mi propia pregunta. keytool-maven-plugin -> versión 1.5 en lugar de 1.3 – RockMeetHardplace