2014-10-02 4 views
0

저는 자체 서명 인증서를 사용하여 Ubuntu 14.04에서 Jetty가 내장 된 기본 포트 443 (웹 서버 A)에 HTTPS를 통해 웹 응용 프로그램을 제공하고 있습니다. 이제는 오래 동안 잘 작동했지만, 같은 머신에서 다른 임베디드 Jetty 웹 서버 (serverB)를 실행하고 싶습니다. serverB가 기본 포트 443을 사용하여 SSL을 실행하도록하고 싶습니다. 그래서 serverA를 변경하여 다른 포트에서 요청을 수신해야합니다.443 이외의 포트를 통해 HTTPS가 내장 된 Jetty를 사용하는 방법은 무엇입니까?

저는 444와 8080을 사용하여 serverA를 시험해 보았습니다. 올바른 포트에서 요청을 수신하고 있음을 알리는 서버가 정상적으로 작동합니다. 요청은 멈추고 서버 로그는 아무 것도 말하지 않습니다. 서버를 포트 443에서 청취하면 모든 것이 정상적으로 작동합니다.

SSL을 사용하도록 웹 서버를 구성한 경우 어떤 포트를 사용하든별로 중요하지 않다고 생각했습니다. 내가해야 할 일이 있니?

// Java 7 bug (feature?) - this disables SNI everywhere... 
    // required or else outgoing HTTPS requests will fail 
    System.setProperty("jsse.enableSNIExtension", "false"); 

    PropertyConfigurator.configure("./log4j.properties"); 
    Server server = new Server(); 

    WebAppContext webapp = new WebAppContext(); 
    webapp.setContextPath("/"); 
    webapp.setWar("war"); 
    server.setHandler(webapp); 

    HttpConfiguration https = new HttpConfiguration(); 
    https.addCustomizer(new SecureRequestCustomizer()); 

    SslContextFactory sslContextFactory = new SslContextFactory(); 
    sslContextFactory.setKeyStorePath("keystore.jks"); 
    sslContextFactory.setKeyStorePassword("password"); 
    sslContextFactory.setKeyManagerPassword("password"); 

    ServerConnector sslConnector = new ServerConnector(server, 
      new SslConnectionFactory(sslContextFactory, "http/1.1"), 
      new HttpConnectionFactory(https)); 
    sslConnector.setPort(port); 

    server.setConnectors(new Connector[] { sslConnector }); 

    try { 
     LOG.info("Starting server on port " + port); 
     server.start(); 
     server.join(); 

    } catch (Exception e) { 
     LOG.fatal("The web server has crashed", e); 
    } 

참고 :

가 여기 내 발사 코드의 내가 이해로부터, HTTPS에 사용되는 포트는 중요하지 않습니다, 때문에 수퍼 유저 또는 뭔가에 StackOverflow과없는 이유입니다. 나는 이것이 부두 문제라고 가정하고있다.

편집 :
죄송합니다, 부두 버전을 언급하는 것을 잊었다. 그것은 9.2.0

+0

괜찮습니다. 최신 성숙/안정 릴리스는'9.2.3.v20140905'입니다. –

+0

그런데, 나는 jetty-all-9.2.0.M0.jar를 사용하고 있습니다 - 그렇지 않아야합니까? – RTF

+0

테스 터만 불안정한 것으로 간주되는 시험판 "마일스톤 0"입니다. –

답변

1

부두를 말하지 않았으므로 부두에 말한 것처럼 안전하다고 생각하지 마십시오. 그냥 기본값을 사용하는 것입니다.

HttpConfiguration https = new HttpConfiguration(); 
https.setSecurePort(port); /* missing this */ 
https.addCustomizer(new SecureRequestCustomizer()); 

비정상적인 것처럼 보일 수 있지만 안전하지 않은 방법으로 연결이 이루어진 경우에도 안전하다고 생각할 수 있으므로 실제로는 필요합니다. (예 : M0, M1, RC0 등이 아닌) 석방 된 안정된 부두를 사용하는 한, 당신은 부두 앞에서 대리인이나 SSI로 종료 된 부하 분산 장치와 같은 것입니다 (다양한 방법이 아주 멋집니다.)

+0

은 여전히 ​​필요한'sslConnector.setPort (포트)'입니까? – RTF

+0

솔루션에 포함 된 문과 함께 포트 444에 여전히 정지합니다. 나는'sslConnector.setPort (port)'를 제거하려고 시도했지만 그것도 작동하지 않습니다. – RTF

+1

코드가 잘 작동합니다 (루트로 실행되지 않았기 때문에 12444 포트를 선택했습니다). 1024 이상의 포트를 사용해보십시오. 포트가 작동하는 경우 권한있는 포트 문제 또는 방화벽 문제가 발생합니다. –