- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 comodo Positive SSL Multi-Site 证书加载到 Java 的 HttpsServer 中。我没有从代码中收到任何错误,但是当我尝试在浏览器中访问 URL 时,它告诉我存在 SSL 错误。 Chrome 和 FireFox 均未提供任何其他信息。该证书在 Apache 中运行良好。
下面是我使用的代码。我已经说得很详细了。有什么不正确的地方吗?我已经将私钥转换为 pkcs8 以便导入。我正在加载的证书和包是 PEM 编码的。
serverHttps = HttpsServer.create(new InetSocketAddress(ports[port_selector]), 0);
SSLContext sslContext = SSLContext.getInstance("TLS");
String alias = "alias";
// Load Certificates
InputStream stream = MyClass.class.getResourceAsStream("/certs/mycert.crt");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(stream);
stream.close();
stream = MyClass.class.getResourceAsStream("/certs/bundle.crt");
cf = CertificateFactory.getInstance("X.509");
Collection bundle = cf.generateCertificates(stream);
stream.close();
// Build cert chain
java.security.cert.Certificate[] chain = new Certificate[bundle.size()+1];
Iterator i = bundle.iterator();
int pos = 0;
while (i.hasNext()) {
chain[pos] = (Certificate)i.next();
pos++;
}
chain[chain.length-1] = cert;
// Load private key
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
stream = MyClass.class.getResourceAsStream("/certs/pkcs8_my_key");
PKCS8EncodedKeySpec pkcs8 = new PKCS8EncodedKeySpec(IOUtils.toByteArray(stream));
RSAPrivateKey privKey = (RSAPrivateKey) keyFactory.generatePrivate(pkcs8);
stream.close();
stream = null;
KeyStore ks = KeyStore.getInstance("JKS");
char[] ksPassword = "mypass".toCharArray();
ks.load(null, ksPassword);
ks.setKeyEntry(alias, privKey, ksPassword, chain);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, ksPassword);
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(ks);
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
// serverHttps.setHttpsConfigurator(new HttpsConfigurator(sslContext));
serverHttps.setHttpsConfigurator ( new HttpsConfigurator( sslContext )
{
@Override
public void configure ( HttpsParameters params )
{
try
{
// initialise the SSL context
SSLContext c = SSLContext.getDefault ();
SSLEngine engine = c.createSSLEngine ();
params.setNeedClientAuth ( false );
params.setCipherSuites ( engine.getEnabledCipherSuites () );
params.setProtocols ( engine.getEnabledProtocols () );
// get the default parameters
SSLParameters defaultSSLParameters = c.getDefaultSSLParameters ();
params.setSSLParameters ( defaultSSLParameters );
}
catch ( Exception ex )
{
System.out.println( "Failed to configure HTTPS server: "+ex.getMessage() );
System.exit(100);
}
}
} );
最佳答案
您的服务器证书必须是 keystore 条目中的 chain[0]
。
剩余的证书应该按向上顺序排列,即 root 排在最后 - 当您使用 keytool 时,它会将它们按此顺序排列 - 因为 JSSE 服务器按 keystore 顺序和 SSL/TLS 协议(protocol)发送它们说他们应该按向上的顺序发送。然而,根据我的经验(大多数?)浏览器/客户端将容忍链的其余部分出现故障,只要服务器证书是第一个。
PS:我认为您的configure
重写中的所有内容都是不必要的。您没有做任何事情来使 SSLContext 的参数与默认参数不同,默认上下文的 SSLParameters 是(并覆盖)您刚刚单独设置的 CipherSuites 和 Protocols。但我不能轻易测试。
关于java - 在 Java HttpsServer 中使用 Positive SSL Multi-Site Cert 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32365940/
谁能告诉我 Core-site.xml、hdfs-site.xml、mapred-site.xml 和 yarn-site.xml 必须具备的属性,没有这些属性 hadoop 就无法启动? 最佳答案
由于特定的 problem我设法解决了这个问题,我今天大部分时间都在弄清楚 site.py(s) 是如何工作的。有一点我不明白。 据我了解,当加载 python 时,首先运行 lib/python2.
这个问题在这里已经有了答案: Using async/await with a forEach loop (33 个答案) 关闭 4 年前。 我认为我的 driver.get(site) 调用设置错
与hadoop api configuration on the client machine有关。 如果我们尝试将客户端计算机上的mapred-site.xml保持尽可能少=仅指定mapred.jo
我一直对site-packages的命名原理有些好奇。 site 在这种情况下是什么意思?我怀疑它的意思是“网站”,而且我从未听说过与安装位置或机器上下文相关的“站点”。 有什么想法吗? 最佳答案 我
我有一个本地 NiFi 实例,我想通过安全的站点到站点通信将数据发送到 AWS 服务器上的远程 NiFi 实例。 我使用 NiFi TLS 工具包为我的客户端和服务器 keystore 和信任库生成了
已关闭。这个问题是 not about programming or software development 。目前不接受答案。 这个问题似乎不是关于 a specific programming
我尝试按照说明在我的页面上设置 reCAPTCHA here 。我注册了 API key 对,并获得了公钥和私钥。对我来说,不清楚应该如何使用私钥,并且我无法找到有关它的更多信息。调用 reCAPTC
尝试我的第一个“HELLO WORLD”类型的 Web 应用程序,该应用程序基于显示 godaddy 设置的示例程序。 使用 Visual Studio 2017 和 C#。我的程序在 localho
我使用 HttpClient 从 Hadoop 服务器下载文件。 但其他人说这不利于安全,因为它不需要输入用户 ID。所以我必须将其更改为webhdfs或hdfs。 我必须连接 Hadoop,但它不是
去年,我根据 GitHub Pages' instructions 将我的博客设置为 GitHub 页面“用户站点”在遵循他们的命名约定 username.github.io 的 repo 中。但是,
我尝试了几天在 2 个站点之间创建 VPN 隧道,但没有成功。 场景 我有以下场景: 站点 A 的 IP 地址为 192.168.1.0/24,网关 GWA 的地址为 192.168.1.254 和
我们有一个 VSO 存储库,同一解决方案中包含多个站点。我们希望能够通过持续交付将彼此独立的站点部署到 Azure。现在,第一个站点按字母顺序部署到我们所有的站点,这当然是不可取的。 这可以实现吗?
我们有一个 VSO 存储库,同一解决方案中包含多个站点。我们希望能够通过持续交付将彼此独立的站点部署到 Azure。现在,第一个站点按字母顺序部署到我们所有的站点,这当然是不可取的。 这可以实现吗?
如何为查看者输入“站点”? Eclipse API 中的“站点”是什么? 我在SampleView中找到了以下代码: viewer.setInput(getViewSite()); 其中 viewer
在 The Django Book在关于管理站点的第 6 章中,他们告诉我将以下 URL 模式添加到 urls.py: urlpatterns = patterns('', # ...
我正在尝试安装站点包,并且在运行 makemigrations 时收到错误: django.contrib.admin.sites.AlreadyRegistered: The model Site
我正在尝试使用 Google Tag Manager对于使用 Google Sites 创建的站点,但到目前为止我还没有运气。这个问题似乎已经出现在几个论坛上,但我无法为此找到任何明确的答案。 帮助将
在我的电脑中: /etc/R 中有三个文件Renviron 和 Rprofile.site、Renviron.site 、我在任何地方都找不到Rprofile。这是一个适当的状态吗? Rprofile
我正在尝试安装站点包,并且在运行 makemigrations 时收到错误: django.contrib.admin.sites.AlreadyRegistered: The model Site
我是一名优秀的程序员,十分优秀!