【发布时间】:2019-07-23 12:33:49
【问题描述】:
我正在尝试让“嵌入式”Jetty 与 https 一起使用。
Java 信息:
/opt/ducc/test/java/jdk-11.0.3+7/bin/java -version
openjdk版本“11.0.3”2019-04-16
码头信息:
ls
jetty-distribution-9.4.6.v20170531
密钥库信息:
[ducc@ducc-master-1 资源]$ keytool -list -keystore keystore 回车 密钥库密码:
密钥库类型:jks 密钥库提供者:IBMJCE
您的密钥库包含 3 个条目
root,2019 年 7 月 23 日,trustedCertEntry,证书指纹 (SHA1): 66:7C:48:44:D0:B6:0B:EF:1A:F7:ED:D5:2D:C3:55:76:B0:1A:02:73 中级,2019 年 7 月 23 日,trustedCertEntry,证书指纹 (SHA1): F0:46:B4:00:B8:52:24:6E:A2:94:6B:17:CE:83:23:49:54:9A:3A:49 ducc-master-1.sl.cloud9.ibm.com,2019 年 7 月 23 日,trustedCertEntry, 证书指纹 (SHA1): D9:0C:9D:A8:A5:C9:81:E9:04:AF:55:63:73:9B:E4:8D:3C:FF:12:C2
码头服务器代码:
public static void main(String[] args) {
try {
Server server = new Server();
server.setHandler(new HelloWorld());
int portHttps = 57081;
String pw = "xxxxxxxx";
SslContextFactory sslContextFactory = new SslContextFactory();
String keystore = "/opt/ducc/test/resource/keystore";
HttpConfiguration http_config = new HttpConfiguration();
http_config.setSecureScheme("https");
http_config.setSecurePort(portHttps);
HttpConfiguration https_config = new HttpConfiguration(http_config);
https_config.addCustomizer(new SecureRequestCustomizer());
ServerConnector https = new ServerConnector(server,
new SslConnectionFactory(sslContextFactory,"http/1.1"),
new HttpConnectionFactory(https_config));
https.setPort(portHttps);
sslContextFactory.setKeyStorePath(keystore);
sslContextFactory.setKeyStorePassword(pw);
sslContextFactory.setKeyManagerPassword(pw);
server.setConnectors(new Connector[] { https });
server.addConnector(https);
server.start();
server.join();
}
catch(Exception e) {
e.printStackTrace();
}
}
Jetty 日志文件 sn-p,显示错误:
2019-07-23 07:04:18.357:DBUG:oejis.SslConnection:qtp1008531893-35: 填充 b[0]= SslConnection@98e9b6f4{NEED_TASK,eio=0/-1,di=-1}=>HttpConnection@1fae4192[p=HttpParser{s=START,0 的 0},g=HttpGenerator@10260d78{s=START}]=>HttpChannelOverHttp@3a5da0e8{r=0,c=false,a=IDLE,uri=null}/9.59.193.91:57081,OPEN,fill=-,flush=-,to=2/30000}{io=0/0,kio=0,kro=1}->SslConnection@98e9b6f4{NEED_TASK,eio=0 /-1,di=-1}=>HttpConnection@1fae4192[p=HttpParser{s=START,0 的 0},g=HttpGenerator@10260d78{s=START}]=>HttpChannelOverHttp@3a5da0e8{r=0,c=false,a=IDLE,uri=null} 2019-07-23 07:04:18.357:DBUG:oejus.SslContextFactory:qtp1008531893-35: type=host_name (0) 的 SNI 匹配, 价值=ducc-master-1.sl.cloud9.ibm.com 2019-07-23 07:04:18.357:DBUG:oejus.SslContextFactory:qtp1008531893-35:SNI 匹配的 ducc-master-1.sl.cloud9.ibm.com->null 2019-07-23 07:04:18.360:DBUG:oejus.SniX509ExtendedKeyManager:qtp1008531893-35: 在 sun.security.ssl.SSLEngineImpl@58859874 上选择别名 null/EC 2019-07-23 07:04:18.360:DBUG:oejus.SniX509ExtendedKeyManager:qtp1008531893-35: 在 sun.security.ssl.SSLEngineImpl@58859874 上选择别名 null/EC 2019-07-23 07:04:18.360:DBUG:oejus.SniX509ExtendedKeyManager:qtp1008531893-35: 在 sun.security.ssl.SSLEngineImpl@58859874 上选择别名 null/RSA 2019-07-23 07:04:18.360:DBUG:oejus.SniX509ExtendedKeyManager:qtp1008531893-35: 在 sun.security.ssl.SSLEngineImpl@58859874 上选择别名 null/RSASSA-PSS 2019-07-23 07:04:18.360:DBUG:oejus.SniX509ExtendedKeyManager:qtp1008531893-35: 在 sun.security.ssl.SSLEngineImpl@58859874 上选择别名 null/RSA 2019-07-23 07:04:18.360:DBUG:oejus.SniX509ExtendedKeyManager:qtp1008531893-35: 在 sun.security.ssl.SSLEngineImpl@58859874 上选择别名 null/RSA 2019-07-23 07:04:18.360:DBUG:oejus.SniX509ExtendedKeyManager:qtp1008531893-35: 在 sun.security.ssl.SSLEngineImpl@58859874 上选择别名 null/RSASSA-PSS 2019-07-23 07:04:18.360:DBUG:oejus.SniX509ExtendedKeyManager:qtp1008531893-35: 在 sun.security.ssl.SSLEngineImpl@58859874 上选择别名 null/RSA 2019-07-23 07:04:18.360:DBUG:oejis.SslConnection:qtp1008531893-35: 关机输出:oshut=false,ishut=true SslConnection@98e9b6f4{NEED_WRAP,eio=-1/-1,di=-1}=>HttpConnection@1fae4192[p=HttpParser{s=START,0 of 0},g=HttpGenerator@10260d78{s=START}]=>HttpChannelOverHttp@3a5da0e8{r=0,c=false,a=IDLE,uri=null}/9.59.193.91:57081,OPEN,fill=-,flush=-,to=5/30000}{io=0/0,kio=0,kro=1}->SslConnection@98e9b6f4{NEED_WRAP,eio=- 1/-1,di=-1}=>HttpConnection@1fae4192[p=HttpParser{s=START,0 of 0},g=HttpGenerator@10260d78{s=START}]=>HttpChannelOverHttp@3a5da0e8{r=0,c=false,a=IDLE,uri=null} 2019-07-23 07:04:18.360:DBUG:oejis.SslConnection:qtp1008531893-35: 冲洗 b[0]= SslConnection@98e9b6f4{NEED_WRAP,eio=-1/-1,di=-1}=>HttpConnection@1fae4192[p=HttpParser{s=START,0 of 0},g=HttpGenerator@10260d78{s=START}]=>HttpChannelOverHttp@3a5da0e8{r=0,c=false,a=IDLE,uri=null}/9.59.193.91:57081,OPEN,fill=-,flush=-,to=5/30000}{io=0/0,kio=0,kro=1}->SslConnection@98e9b6f4{NEED_WRAP,eio=- 1/-1,di=-1}=>HttpConnection@1fae4192[p=HttpParser{s=START,0 of 0},g=HttpGenerator@10260d78{s=START}]=>HttpChannelOverHttp@3a5da0e8{r=0,c=false,a=IDLE,uri=null} 2019-07-23 07:04:18.361:DBUG:oejis.SslConnection:qtp1008531893-35: 包装状态 = CLOSED HandshakeStatus = NOT_HANDSHAKING bytesConsumed = 0 bytesProduced = 7 sequenceNumber = 0 SslConnection@98e9b6f4{NOT_HANDSHAKING,eio=-1/7,di=-1}=>HttpConnection@1fae4192[p=HttpParser{s=START,0 的 0},g=HttpGenerator@10260d78{s=START}]=>HttpChannelOverHttp@3a5da0e8{r=0,c=false,a=IDLE,uri=null}/9.59.193.91:57081,OPEN,fill=-,flush=-,to=6/30000}{io=0/0,kio=0,kro=1}->SslConnection@98e9b6f4{NOT_HANDSHAKING,eio=- 1/7,di=-1}=>HttpConnection@1fae4192[p=HttpParser{s=START,0 的 0},g=HttpGenerator@10260d78{s=START}]=>HttpChannelOverHttp@3a5da0e8{r=0,c=false,a=IDLE,uri=null} 2019-07-23 07:04:18.361:DBUG:oeji.ChannelEndPoint:qtp1008531893-35: 冲洗 7 SocketChannelEndPoint@d118e56a{/9.74.14.171:41120/9.59.193.91:57081,OPEN,fill=-,flush=-,to=6/30000}{io=0/0,kio=0,kro=1 }->SslConnection@98e9b6f4{NOT_HANDSHAKING,eio=-1/0,di=-1}=>HttpConnection@1fae4192[p=HttpParser{s=START,0 的 0},g=HttpGenerator@10260d78{s=START}]=>HttpChannelOverHttp@3a5da0e8{r=0,c=false,a=IDLE,uri=null} 2019-07-23 07:04:18.361:DBUG:oeji.ChannelEndPoint:qtp1008531893-35: 关闭 SocketChannelEndPoint@d118e56a{/9.74.14.171:41120/9.59.193.91:57081,CLOSED,fill=-,flush=-,to=0/30000}{io=0/0,kio=0,kro=1 }->SslConnection@98e9b6f4{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>HttpConnection@1fae4192[p=HttpParser{s=START,0 的 0},g=HttpGenerator@10260d78{s=START}]=>HttpChannelOverHttp@3a5da0e8{r=0,c=false,a=IDLE,uri=null} 2019-07-23 07:04:18.361:DBUG:oeji.WriteFlusher:qtp1008531893-35: 忽略:WriteFlusher@95ef7348{IDLE}->null java.nio.channels.ClosedChannelException 2019-07-23 07:04:18.361:DBUG:oeji.FillInterest:qtp1008531893-35: FillInterest@f9b047db{false,null} onClose null 2019-07-23 07:04:18.361:DBUG:oeji.ManagedSelector:qtp1008531893-35:排队更改 org.eclipse.jetty.io.ManagedSelector$$Lambda$83/0000000088041510@389822c0 在 org.eclipse.jetty.io.ManagedSelector@4e9e4706 id=3 键=1 选择=0 2019-07-23 07:04:18.361:DBUG:oeji.WriteFlusher:qtp1008531893-35:忽略: WriteFlusher@7a814014{IDLE}->null javax.net.ssl.SSLHandshakeException: 没有共同的密码套件 2019-07-23 07:04:18.361:DBUG:oeji.ManagedSelector:qtp1008531893-28:选择器循环 从选择中醒来,0/0 选择 2019-07-23 07:04:18.361:DBUG:oejuts.EatWhatYouKill:qtp1008531893-28: EatWhatYouKill@f9f67448/org.eclipse.jetty.io.ManagedSelector$SelectorProducer@a52dbf0e/PRODUCING/1/1->IDLE/0/1 总承包! org.eclipse.jetty.io.ManagedSelector$$Lambda$83/0000000088041510@389822c0 2019-07-23 07:04:18.361:DBUG:oejut.QueuedThreadPool:qtp1008531893-28: 队列 EatWhatYouKill@f9f67448/org.eclipse.jetty.io.ManagedSelector$SelectorProducer@a52dbf0e/PRODUCING/0/1 2019-07-23 07:04:18.361:DBUG:oejuts.EatWhatYouKill:qtp1008531893-32: EatWhatYouKill@f9f67448/org.eclipse.jetty.io.ManagedSelector$SelectorProducer@a52dbf0e/PRODUCING/0/1 生产无阻塞 2019-07-23 07:04:18.361:DBUG:oejut.InvocableInvocableExecutor:qtp1008531893-28: org.eclipse.jetty.util.thread.Invocable$InvocableExecutor@9918488e 调用 org.eclipse.jetty.io.ManagedSelector$$Lambda$83/0000000088041510@389822c0 2019-07-23 07:04:18.361:DBUG:oeji.ManagedSelector:qtp1008531893-32: 选择器循环等待选择 2019-07-23 07:04:18.361:DBUG:oejut.QueuedThreadPool:qtp1008531893-40: 运行 EatWhatYouKill@f9f67448/org.eclipse.jetty.io.ManagedSelector$SelectorProducer@a52dbf0e/PRODUCING/0/1 2019-07-23 07:04:18.361:DBUG:oejs.HttpConnection:qtp1008531893-35: javax.net.ssl.SSLHandshakeException:没有共同的密码套件 java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) 在 java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) 在 java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308) 在 java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264) 在 java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255) 在 java.base/sun.security.ssl.ServerHello$T12ServerHelloProducer.chooseCipherSuite(ServerHello.java:461) 在 java.base/sun.security.ssl.ServerHello$T12ServerHelloProducer.produce(ServerHello.java:294) 在 java.base/sun.security.ssl.SSLHandshake.produce(SSLHandshake.java:436) 在 java.base/sun.security.ssl.ClientHello$T12ClientHelloConsumer.consume(ClientHello.java:1101) 在 java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.onClientHello(ClientHello.java:851) 在 java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.consume(ClientHello.java:810) 在 java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392) 在 java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:448) 在 java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1065) 在 java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1052) 在 java.base/java.security.AccessController.doPrivileged(AccessController.java:739) 在 java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:999) 在 org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.fill(SslConnection.java:747) 在 org.eclipse.jetty.server.HttpConnection.fillRequestBuffer(HttpConnection.java:322) 在 org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:231) 在 org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279) 在 org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110) 在 org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:289) 在 org.eclipse.jetty.io.ssl.SslConnection$3.succeeded(SslConnection.java:149) 在 org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110) 在 org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124) 在 org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128) 在 org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222) 在 org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294) 在 org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199) 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673) 在 org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:591) 在 java.base/java.lang.Thread.run(Thread.java:825) 2019-07-23 07:04:18.361:DBUG:oeji.ManagedSelector:qtp1008531893-28: 销毁 SocketChannelEndPoint@d118e56a{/9.74.14.171:41120/9.59.193.91:57081,CLOSED,fill=-,flush=-,to=0/30000}{io=0/0,kio=-1,kro= -1}->SslConnection@98e9b6f4{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>HttpConnection@1fae4192[p=HttpParser{s=START,0 的 0},g=HttpGenerator@10260d78{s=START}]=>HttpChannelOverHttp@3a5da0e8{r=0,c=false,a=IDLE,uri=null} 2019-07-23 07:04:18.361:DBUG:oejuts.EatWhatYouKill:qtp1008531893-40: EatWhatYouKill@f9f67448/org.eclipse.jetty.io.ManagedSelector$SelectorProducer@a52dbf0e/PRODUCING/0/1 运行
请提出我可能做错了什么。考虑我是证书+安全方面的新手。
=====
改用 OpenJdk keytool 创建密钥库。
[duck@ducc-master-1 测试]$ /opt/duck/test/java/jdk-11.0.3+7/bin/keytool -list -keystore 资源/密钥库 输入密钥库密码:密钥库类型:PKCS12 密钥库提供者:SUN
您的密钥库包含 3 个条目
duck-master-1,2019 年 7 月 23 日,trustedCertEntry,证书 指纹(SHA-256): 6C:C5:9F:CD:E6:DD:79:BE:46:72:7A:08:7E:73:0F:4F:01:C3:EA:9E:6D:37:62:99:32: 0B:1B:EE:FC:A5:84:72 根,2019 年 7 月 23 日,trustedCertEntry,证书指纹 (SHA-256): EC:8B:BD:C4:2A:9C:FD:AF:7D:02:94:11:50:16:C2:A8:2B:F7:3E:6B:4C:24:46:0E:75: EC:A9:FA:A6:A2:42:EB 中级,2019 年 7 月 23 日,trustedCertEntry,证书指纹 (SHA-256): F0:4E:33:1A:B5:4C:8D:F0:ED:E7:AB:1B:67:0B:ED:BB:D1:3C:6F:52:4B:D9:B4:09:F6: CA:03:AC:35:81:04:C8
没有改善。
2019-07-23 08:37:18.146:DBUG:oeji.ManagedSelector:qtp-1083415165-41: 毁坏 SocketChannelEndPoint@79c59b3e{/9.74.14.171:43406/9.59.193.91:57081,CLOSED,fill=-,flush=-,to=1/30000}{io=0/0,kio=-1,kro= -1}->SslConnection@a175c2a2{NOT_HANDSHAKING,eio=-1/-1,di=-1}=>HttpConnection@634a6259[p=HttpParser{s=START,0 的 0},g=HttpGenerator@2d97796{s=START}]=>HttpChannelOverHttp@a0ea7c17{r=0,c=false,a=IDLE,uri=null} 2019-07-23 08:37:18.145:DBUG:oejs.HttpConnection:qtp-1083415165-32: javax.net.ssl.SSLHandshakeException:没有共同的密码套件 java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) 在 java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) 在 java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308) ...
【问题讨论】:
标签: ssl ssl-certificate jetty