jetty - 如何将 NSS 与 Jetty 一起使用?

标签 jetty nss

我正在尝试设置 Jetty 以使用 NSS 作为其加密引擎。我已经到达服务器启动的地步,但任何尝试连接的客户端似乎都卡在浏览器中。

我遵循的设置过程/代码如下(32位Windows 1.6 JVM)。

NSS 数据库创建

modutil.exe -create -dbdir C:\nssdb
modutil.exe -create -fips true -dbdir C:\nssdb
modutil.exe -create -changepw "NSS FIPS 140-2 Certificate DB" -dbdir C:\nssdb

将 NSS 加载到 Java 中

String config = "name = NSS\n";
config += "nssLibraryDirectory = C:\\nss\\lib\n";
config += "nssSecmodDirectory = C:\\nssdb\n";
config += "nssDbMode = readWrite\n";
config += "nssModule = fips";

InputStream stream = new ByteArrayInputStream(config.getBytes("UTF-8"));

Provider nss = new sun.security.pkcs11.SunPKCS11(stream);
Security.addProvider(nss);

int sunJssePosition = -1;
int currentIndex = 0;
for (Provider provider : Security.getProviders()) {
    if ("SunJSSE".equals(provider.getName())) {
        sunJssePosition = currentIndex + 1;
        break;
    }

    currentIndex++;
}

Security.removeProvider("SunJSSE");

Provider sunJsse = new com.sun.net.ssl.internal.ssl.Provider(nss);
if (sunJssePosition == -1) {
    Security.addProvider(sunJsse);
} else {
    Security.insertProviderAt(sunJsse, sunJssePosition);
}

NSS 自签名证书生成

C:\nss\bin\certutil.exe -S -n 127.0.0.1 -x -t "u,u,u" -s "CN=127.0.0.1, OU=Foo, O=Bar, L=City, ST=NY, C=US" -m 25001 -d C:\nssdb

jetty 启动

    KeyStore ks = KeyStore.getInstance("PKCS11");
    ks.load(null, "SuperSecret");

    //Start setting up Jetty
    Server server = new Server();

    SslContextFactory sslContextFactory = new SslContextFactory();
    //sslContextFactory.setKeyStoreProvider("SunPKCS11-NSS");
    sslContextFactory.setKeyStore(ks);
    //sslContextFactory.setKeyStorePassword(new String("SuperSecret"));

    SslSelectChannelConnector sslConnector = new SslSelectChannelConnector(sslContextFactory);
    sslConnector.setPort(443);
    server.addConnector(sslConnector);

    WebAppContext context = new WebAppContext();

    //Blah Blah Blah, setup Jetty

    server.setHandler(context);

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

有什么想法吗?


编辑:这看起来非常奇怪,但我可以使用 Internet Explorer 访问服务器。 Firefox 似乎是有问题的。

最佳答案

我已经解决了这个问题。事实证明,Java 6 SSL 实现中存在严重错误。解决方案?切换到 Java 7!

关于jetty - 如何将 NSS 与 Jetty 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16529644/

相关文章:

linux - 如何启动具有多个独立实例的 Jetty?

NSS 中的 SSL 示例

cURL 与 NSS - 找不到证书

java - JSS SSLSocket 问题选择客户端证书

java - jetty 网络服务器安全

java - 如何在 Heroku 上实现多线程 Jetty RESTful 服务?

ssl - Dropwizard SSL 服务继续返回错误 - 服务器中止 SSL 握手

java - 使用 Jetty 设置 Jax-rs 2.2

ssl - 将新的客户端证书添加到 NSS 数据库