CER / P7b证书的JBoss Httpsconfiguration失败

我的问题与此类似: Tomcat无法在密钥库中find密钥条目

我有一个CER文件,我使用下面的命令导入到JKS中:

keytool -importcert -file codesign_Base64.cer -keystore imported_keystore.jks -alias my_alias 

然后,我在jBoss的standalone.xml中有下面的configuration行。

 <subsystem xmlns="urn:jboss:domain:web:1.1" native="false" default-virtual-server="default-host"> <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" redirect-port="8443"/> <connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" enable-lookups="false" secure="true"> <ssl name="ssl" key-alias="my_alias " password="change_this" certificate-key-file="C:\Programs\Siemens\JBoss7.1.0\domain\configuration\imported_keystore.jks " protocol="TLSv1" verify-client="false"/> </connector> <virtual-server name="default-host" enable-welcome-root="false"> <alias name="localhost"/> <alias name="example.com"/> </virtual-server> </subsystem> 

有了这个,当我尝试启动应用程序时,在jBoss日志文件中看到以下错误消息,描述了这种错误。

 11:46:19,692 ERROR [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-4) Error initializing endpoint: java.io.IOException: Alias name mykey does not identify a key entry at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:517) [jbossweb-7.0.10.Final.jar:] at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:452) [jbossweb-7.0.10.Final.jar:] at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.java:168) [jbossweb-7.0.10.Final.jar:] at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:977) [jbossweb-7.0.10.Final.jar:] at org.apache.coyote.http11.Http11Protocol.init(Http11Protocol.java:190) [jbossweb-7.0.10.Final.jar:] at org.apache.catalina.connector.Connector.init(Connector.java:983) [jbossweb-7.0.10.Final.jar:] at org.jboss.as.web.WebConnectorService.start(WebConnectorService.java:267) [jboss-as-web-7.1.0.Final.jar:7.1.0.Final] at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_75] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_75] at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_75] 

但是,如果我探索Java密钥库的内容,我仍然会看到适当的密钥的存在。

 C:\Programs\Siemens\JBoss7.1.0\domain\configuration>keytool -list -keystore C:\Programs\Siemens\JBoss7.1.0\domain\configuration\winstore.jks Enter keystore password: Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry my_alias, Jun 23, 2017, trustedCertEntry, Certificate fingerprint (SHA1): 8D:64:10:8B:F6:0D:1E:17:01:52:1C:97:8A:89:75:80:2D:2F:45:6B 

当我尝试使用P7B证书时,我遇到了类似的问题。 到目前为止,唯一的解决办法是手动生成证书 – 自签名证书。 这显然不是组织的前进战略

请让我知道这里可能会丢失什么。 上面所包含的类似post似乎暗示着我无法涉及的“证书无关键”的情况。

任何指针肯定会有帮助,因为我在多个地方发布了这个指令,目前我没有任何回应。

谢谢,帕文。

  • 使用大型黑名单拒绝访问Web服务器的最佳方法?
  • 每分钟测量一次“加载时间(毫秒)”
  • 在Apacheconfiguration(httpd.conf)中,多个<Directory>节是如何工作的?
  • 如何诊断高负载的Web服务器locking
  • VPS或专用服务器的Web服务器?
  • Django:带有WSGI的Nginx或带有WSGI的Apache
  • One Solution collect form web for “CER / P7b证书的JBoss Httpsconfiguration失败”

    不,您的密钥库不包含私钥。 看看它说的trustedCertEntry ? 可信证书不是私钥,只是证书,证书不是私钥。 SSL / TLS服务器需要一个私钥和匹配的证书链; 单独的证书不能用于执行协议,因此您的服务器无法接受任何HTTPS连接,因此任何试图与HTTPS连接的浏览器(可能在从HTTPSredirect之后)均失败。 一个P7B也不包含一个私钥,虽然它可以包含多个证书,而CER通常只包含一个。 (相比之下,除非使用相当less见的“客户端身份validation”选项,否则客户通常只需要CA'root'证书并且不需要私钥。)

    您需要一个privateKeyEntry ,其中包含该密钥的私钥和证书链以及所需的主机名 对于Java来说,有两种方法(使用变体):

    1:使用keytool在JKS中生成一个新的私钥(带有虚拟自签名证书),并为其创build一个CSR(证书签名请求,或只是Cert [证书]请求]。 根据需要提交企业社会责任等其他内容,例如向证书颁发机构(CA)付款以获得合适的证书,通常伴随着至less一个可能需要信任证书的“链”或“中间”证书。 使用keytool将证书/链导入到相同的JKS和已经包含私钥的条目中 (replace伪自签名证书); 您也可以将链式证书导入为trustedcert条目。

    方法1是规范的,在我看过的每一个证书供应商的网站上,CA和经销商通常反复描述; 我不知道你怎么错过了他们。 请注意,这些描述通常是指使用最广泛的基于Java的Web服务器Tomcat; Jbossnetworking服务器组件,现在被命名为Wildfly,实际上是Tomcat的一个分支。 这里是前两个谷歌find我:
    * https://www.digicert.com/csr-creation-java.htm
    * https://knowledge.symantec.com/support/ssl-certificates-support/index?page=content&id=INFO227

    2A:使用其他工具(如Windows或MacOS或OpenSSL)生成一个私钥,并从CA获取合适的证书(通常使用CSR),并包括其链。 如果适用,将私钥和证书链导出/转换/组合成PKCS12文件(在Microsoft-land中也称为PFX),然后使用keytool -importkeystore将PKCS12转换为JKS。 (在很多情况下,在Java 8中,您可以直接使用PKCS12,而不必将其转换为JKS,而Java 9预计会鼓励这一点。)

    2B:如果你已经有一个私人密钥生成和合适的证书/链获得与其他工具, 只要把它们在一个PKCS12,可能转换为JKS如上。

    请注意,像Microsoft,MacOS和Firefox这样的其他一些graphics用户界面集中在证书上:它们显示一个可信赖的其他证书作为“证书”,而一个专用密钥加证书组合显示为“带有私钥的证书”。 但差异仍然是至关重要的。 一台服务器必须有私钥,并试图使用“ 没有私钥的证书”失败。 Java改为具有不同types的密钥库条目 – 尽pipe对于一些密钥库,这些types实际上并不是直接存储的。

    服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器.