سؤال

أحاول إعداد الحد الأدنى من HTTP عبر خادم SPDY باستخدام رصيف, ، لأغراض تجريبية.أنا أعمل على هذا الكود:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.spdy.http.HTTPSPDYServerConnector;
import org.eclipse.jetty.util.ssl.SslContextFactory;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;

public class MySPDYHelloServer {
    public static void main(String[] args) throws Exception {
        Server server = new Server();

        SslContextFactory sslFactory = new SslContextFactory();
        sslFactory.setKeyStorePath("dummy_keystore.jks");
        sslFactory.setKeyStorePassword("password");
        sslFactory.setProtocol("TLSv1");

        Connector connector = new HTTPSPDYServerConnector(sslFactory);
        connector.setPort(8443);
        server.addConnector(connector);

        server.setHandler( new AbstractHandler(){
            public void handle(String target, Request baseRequest,
                    HttpServletRequest request, HttpServletResponse response)
                    throws IOException, ServletException {
                response.setContentType("text/html;charset=utf-8");
                response.setStatus(HttpServletResponse.SC_OK);
                baseRequest.setHandled(true);
                response.getWriter().println("<h1>Hello World</h1>");
            }
        } );

        server.start();
        server.join();
    }
}

لقد قمت بإنشاء مخزن المفاتيح باستخدام:

keytool -genkey -keystore dummy_keystore.jks

عندما أقوم بتوجيه Google Chrome (تم تمكين SPDY) إلى https://localhost:8443 إنه يحذرني بشأن الشهادة غير الموثوقة ثم يتم تحميلها للأبد.

أمثلة خادم العميل SPDY النقية (من هنا) يعمل ويعمل خادم HTTPS البسيط أيضًا؛يبدو أن المشكلة مرتبطة بـ HTTPSPDYServerConnector فصل.

فيما يلي قائمة بملفات JAR التي أستخدمها:

jetty-all-7.6.7.v20120910.jar
npn-boot-7.6.2.v20120308.jar
servlet-api-2.5.jar
spdy-core-7.6.7.v20120910.jar
spdy-jetty-7.6.7.v20120910.jar
spdy-jetty-http-7.6.7.v20120910.jar

وما يتعلق ببيئة Java الخاصة بي:

$ cat /opt/jdk1.7.0_07/release 
JAVA_VERSION="1.7.0"
OS_NAME="Linux"
OS_VERSION="2.6"
OS_ARCH="i586"

ملحق الحل

جيسي ماكونيل قدمت إجابة, على أي حال، أولئك الذين يستخدمون Eclipse قد يجدون ما يلي مفيدًا.

المرطبان npn-boot-7.6.2.v20120308.jar يجب (أيضًا) أن توضع في:

Run Configurations... -> Classpath -> Bootstrap Entries -> Add External JARs

لاحظ أنه منذ ذلك الحين مسائل النظام, ، يجب أن يظهر هذا الإدخال قبل ال JRE System Library.

هل كانت مفيدة؟

المحلول

هل تستخدم npn-boot كجرة Bootclasspath عند بدء هذا الأمر؟

لن يدعم Stock jvm npn (تفاوض البروتوكول التالي) ولن يعمل spdy، لذلك عليك التأكد من استخدام npn-boot jar بالتزامن مع خيار -Xbootclasspath.يبدو الأمر وكأنه مشكلتك منذ تعاملك مع تحميل الشهادة ثم توقفها ... كما تشير أيضًا إلى npn-boot باعتبارها تبعية عندما تكون بديلاً لفئات jvm أكثر من تبعية نموذجية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top