- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家。我需要使用服务器和客户端证书连接到服务器。我正在使用以下代码:(移植形式android)
private HttpsURLConnection getHttpsURLConnection(URL url, String certAlias)
throws CertificateException, IOException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException, UnrecoverableKeyException, java.security.cert.CertificateException {
HttpsURLConnection connection = null;
CertificateFactory certFactory = null;
java.security.cert.Certificate cert = null;
KeyStore keyStore = null;
TrustManagerFactory tmFactory = null;
SSLContext sslContext = null;
//load client cert
final KeyStore clientKS = getClientKeyStore();
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keyStore, clientCertificatePassword.toCharArray());
// Load certificates from an InputStream
certFactory = CertificateFactory.getInstance("X.509");
InputStream servCertIS = new FileInputStream(caCertificateName);
cert = certFactory.generateCertificate(servCertIS);
// Create a KeyStore containing the trusted certificates
keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, null);
keyStore.setCertificateEntry(certAlias, cert);
// Create a TrustManager that trusts the certificates in our KeyStore
tmFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmFactory.init(keyStore);
// Create an SSLContext that uses our TrustManager
sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmFactory.getTrustManagers(), null);
connection = (HttpsURLConnection)url.openConnection();
connection.setSSLSocketFactory(sslContext.getSocketFactory());
InputStream in = connection.getInputStream(); //error!
//peoccess inputStream here.
return connection;
我已经为 ssl 和 handshake 启用调试属性并得到以下输出:
*** ServerHelloDone
*** Certificate chain
***
*** ClientKeyExchange, RSA PreMasterSecret, TLSv1
main, WRITE: TLSv1 Handshake, length = 269
SESSION KEYGEN:
PreMaster Secret:
CONNECTION KEYGEN:
Client Nonce:
Server Nonce:
Master Secret:
Client MAC write Secret:
Server MAC write Secret:
Client write key:
Server write key:
Client write IV:
Server write IV:
main, WRITE: TLSv1 Change Cipher Spec, length = 1
*** Finished
verify_data: { 104, 160, 185, 140, 237, 61, 94, 119, 119, 68, 101, 52 }
***
main, WRITE: TLSv1 Handshake, length = 48
main, received EOFException: error
main, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
%% Invalidated: [Session-1, TLS_RSA_WITH_AES_128_CBC_SHA]
main, SEND TLSv1 ALERT: fatal, description = handshake_failure
main, WRITE: TLSv1 Alert, length = 32
main, called closeSocket()
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at testClient1.getHttpsURLConnection(testClient1.java:86)
at testClient1.getClient(testClient1.java:106)
at testClient1.main(testClient1.java:134)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at sun.security.ssl.InputRecord.read(Unknown Source)
... 11 more
我在 Android 设备和桌面 java 上遇到此错误。但是我可以使用此客户端证书通过网络浏览器自由连接到服务器。
也许重要不重要服务器的 URL 是:https://icon.sbrf.ru:9443 (注意端口)客户端证书中也有西里尔文名称(我不知道是不是这个问题,但西里尔文符号经常有问题)。
更新
这里是CertificateRequest
*** CertificateRequest
Cert Types: RSA, DSS, ECDSA
Cert Authorities:
<CN=ICONDP, OU=00CA, O=Savings Bank of the Russian Federation, L=RU, ST=Moscow>
<CN=SberBank External CA, O=sberbank, C=ru>
<CN=icon.sbrf.ru, OU=00CA, O=Savings Bank of the Russian Federation, C=RU>
<CN=Sberbank Enterprise CA, O=Sberbank, C=RU>
<CN=tv-icon01.sigma.sbrf.ru, OU=00CA, O=Savings Bank of the Russian Federation, C=RU>
<CN=TV-ICON01.sigma.sbrf.ru, OU=Root Certificate, OU=TV-ICON01Cell01, OU=TV-ICON01CellManager01, O=IBM, C=US>
<CN=Sberbank Root CA, O=Sberbank, C=RU>
<CN=Sberbank Test CA, O=Sberbank, C=RU>
*** ServerHelloDone
*** Certificate chain
***
*** ClientKeyExchange, RSA PreMasterSecret, TLSv1
main, WRITE: TLSv1 Handshake, length = 269
SESSION KEYGEN:
PreMaster Secret:
0000: 03 01 AC CE 4B 71 A4 A6 45 94 75 D8 B5 80 AE DA ....Kq..E.u.....
0010: D3 01 0D 6F FA 1F 6F E4 F8 4C 47 7A EE 48 A6 02 ...o..o..LGz.H..
0020: 21 9F 79 6E 61 AE B0 DA 29 F0 97 B4 FD 0A 41 88 !.yna...).....A.
CONNECTION KEYGEN:
Client Nonce:
0000: 53 D6 17 36 80 81 C3 3B 16 E5 60 3E 29 B3 86 68 S..6...;..`>)..h
0010: F2 CA 49 13 87 19 98 A0 0C 88 88 FE 03 95 F6 91 ..I.............
Server Nonce:
0000: 53 D6 17 31 BA B0 DB E0 0A E2 7E 07 CF 04 C9 F9 S..1............
0010: 17 EA F1 F6 A5 C3 20 50 8D 3C 72 8F 42 57 DF 51 ...... P.<r.BW.Q
Master Secret:
0000: 92 49 CF 65 F3 64 26 CF 54 5F 78 2F 83 4E D2 4A .I.e.d&.T_x/.N.J
0010: 20 E0 E0 AE CC 5F F8 6B 09 4E 2F E6 A8 01 94 10 ...._.k.N/.....
0020: 35 7B BD 2B A7 43 2E D2 4C 0F B1 F6 3C 6B 1E 08 5..+.C..L...<k..
Client MAC write Secret:
0000: 87 04 6A 37 DD 7F B6 D6 AA 31 FE 10 C8 0E B0 71 ..j7.....1.....q
0010: 16 6F 72 AF .or.
Server MAC write Secret:
0000: C7 64 75 F7 E2 67 2C 8F DF 14 6C 5E 7E 01 8A C1 .du..g,...l^....
0010: A0 8B E4 C4 ....
Client write key:
0000: 3E CE F3 FC B1 B0 C7 E2 6C F1 20 68 36 39 A5 E5 >.......l. h69..
Server write key:
0000: 26 C8 9F 98 DE 58 D3 0E A1 25 38 05 4E E7 25 DF &....X...%8.N.%.
Client write IV:
0000: 0C CE 33 F3 1C 00 C1 5B 3F 75 F7 EF EB AA 16 69 ..3....[?u.....i
Server write IV:
0000: 1A 18 D6 B1 32 23 5D 26 24 26 96 BC 42 1F 27 A2 ....2#]&$&..B.'.
main, WRITE: TLSv1 Change Cipher Spec, length = 1
*** Finished
verify_data: { 228, 62, 93, 239, 222, 236, 155, 56, 146, 50, 189, 117 }
***
main, WRITE: TLSv1 Handshake, length = 48
main, received EOFException: error
main, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
%% Invalidated: [Session-1, TLS_RSA_WITH_AES_128_CBC_SHA]
main, SEND TLSv1 ALERT: fatal, description = handshake_failure
main, WRITE: TLSv1 Alert, length = 32
main, called closeSocket()
证书链真的是空的,我不知道为什么,因为我使用的是 100% 有效的客户端证书(我通过网络浏览器检查过)。
还有很多其他信息,包括这条记录之前的日志文件中的证书链,但我相信它们都是关于服务器证书的。
看来问题出在证书加载代码的某个地方,但我不知道在哪里
更新 2
因此,我创建了一个 kesytore 并在那里导入客户端证书,将其转换为 jks。这是 keytool -list -keystore test.jks -v
的结果Keystore type: JKS
Keystore provider: SUN
Your keystore contains 2 entries
Alias name: lp-32205b37-88a0-4d85-8c6a-4a18daa82dd0
Creation date: 28.07.2014
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: EMAILADDRESS=RONovoselov.SBT@sberbank.ru, CN=Новоселов Роман Олегович, OU=CA_Users, OU=CA, DC=sigma, DC=sbrf, DC=ru
Issuer: CN=SberBank External CA, O=sberbank, C=ru
Serial number: 4ccbdc23000000002851
Valid from: Wed Mar 07 16:55:00 MSK 2012 until: Fri Mar 07 17:05:00 MSK 2014
Certificate fingerprints:
MD5: A0:6F:EA:C6:16:34:8D:46:67:26:21:E0:C6:28:BC:63
SHA1: 19:77:D8:62:44:49:08:89:0E:42:60:8E:64:D2:97:18:36:B5:BA:2D
SHA256: D0:CF:86:FD:46:0F:29:E7:4A:26:AE:D5:63:5B:C8:41:1E:A8:D3:13:9E:EC:0D:BA:C6:8D:B1:D4:4D:21:2B:45
Signature algorithm name: SHA1withRSA
Version: 3
Extensions:
#1: ObjectId: 1.2.840.113549.1.9.15 Criticality=false
0000: 30 35 30 0E 06 08 2A 86 48 86 F7 0D 03 02 02 02 050...*.H.......
0010: 00 80 30 0E 06 08 2A 86 48 86 F7 0D 03 04 02 02 ..0...*.H.......
0020: 00 80 30 07 06 05 2B 0E 03 02 07 30 0A 06 08 2A ..0...+....0...*
0030: 86 48 86 F7 0D 03 07 .H.....
#2: ObjectId: 1.3.6.1.4.1.311.21.10 Criticality=false
0000: 30 18 30 0A 06 08 2B 06 01 05 05 07 03 04 30 0A 0.0...+.......0.
0010: 06 08 2B 06 01 05 05 07 03 02 ..+.......
#3: ObjectId: 1.3.6.1.4.1.311.21.7 Criticality=false
0000: 30 2F 06 27 2B 06 01 04 01 82 37 15 08 84 F3 D1 0/.'+.....7.....
0010: 3C 87 F2 87 61 87 BD 9B 02 83 AA B4 63 81 82 FA <...a.......c...
0020: 35 81 2A 84 FB D4 1C 83 BD CB 49 02 01 64 02 01 5.*.......I..d..
0030: 17 .
#4: ObjectId: 1.3.6.1.5.5.7.1.1 Criticality=false
AuthorityInfoAccess [
[
accessMethod: ocsp
accessLocation: URIName: http://pki.sberbank.ru/pki/aia/Cert01.sigma.sbrf.ru_SberBank%20External%20CA.crt
,
accessMethod: caIssuers
accessLocation: URIName: ldap:///CN=SberBank%20External%20CA,CN=AIA,CN=Public%20Key%20Services,CN=Services,CN=Configuration,DC=sigma,DC=sbrf,DC=ru?cACertificate?base?objectClass=certificationAuthority
,
accessMethod: ocsp
accessLocation: URIName: http://extpki.sigma.sbrf.ru/CertEnroll/Cert01.sigma.sbrf.ru_SberBank%20External%20CA.crt
]
]
#5: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: DB F3 38 88 08 D3 25 A2 D6 3E 5A C2 28 6D 21 09 ..8...%..>Z.(m!.
0010: E7 2E 1E B3 ....
]
]
#6: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
[DistributionPoint:
[URIName: http://pki.sberbank.ru/pki/cdp/SberBank%20External%20CA.crl, URIName: ldap:///CN=SberBank%20External%20CA,CN=Cert01,CN=CDP,CN=Public%20Key%20Services,CN=Services,CN=Configuration,DC=sigma,DC=sbrf,DC=ru?certificateRevocationList?base?objectClass=cRLDistributionPoint, URIName: http://extpki.sigma.sbrf.ru/CertEnroll/SberBank%20External%20CA.crl]
]]
#7: ObjectId: 2.5.29.37 Criticality=false
ExtendedKeyUsages [
emailProtection
clientAuth
]
#8: ObjectId: 2.5.29.15 Criticality=false
KeyUsage [
DigitalSignature
Key_Encipherment
]
#9: ObjectId: 2.5.29.17 Criticality=false
SubjectAlternativeName [
Other-Name: Unrecognized ObjectIdentifier: 1.3.6.1.4.1.311.20.2.3
RFC822Name: RONovoselov.SBT@sberbank.ru
]
#10: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 4C AB B5 F4 9B 7D FB 50 73 E0 CF EB AC 3D 00 5F L......Ps....=._
0010: FE 82 32 9F ..2.
]
]
*******************************************
*******************************************
Alias name: test
Creation date: 28.07.2014
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Aleksey Makarkin, OU=SBRF, O=SBRF, L=Moscow, ST=Moscow, C=RU
Issuer: CN=Aleksey Makarkin, OU=SBRF, O=SBRF, L=Moscow, ST=Moscow, C=RU
Serial number: 7f98a299
Valid from: Mon Jul 28 15:10:33 MSK 2014 until: Sun Oct 26 15:10:33 MSK 2014
Certificate fingerprints:
MD5: BC:51:FA:3B:6A:EB:4A:40:BC:87:53:DB:6D:E5:D7:59
SHA1: 74:6B:08:92:0C:8D:57:34:CF:18:EC:6D:60:70:07:C2:07:E5:C5:00
SHA256: DD:4D:C7:3E:0C:4F:25:1B:6F:07:76:98:C2:B4:C8:5D:C9:A8:9D:87:E5:8D:AE:12:26:8C:22:0C:89:1D:E3:02
Signature algorithm name: SHA1withDSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 06 F5 F7 A7 83 44 FC 9C F2 70 6B EC 04 E8 03 3E .....D...pk....>
0010: C4 B5 A0 FC ....
]
]
*******************************************
*******************************************
最佳答案
服务器要求提供客户端证书,但您没有发送,因此它关闭了连接。
要么您根本没有客户端证书,或者至少您没有服务器信任的证书。在跟踪开始之前,您可以立即在 CertificateRequest 消息中看到服务器信任的签名者。
关于Java,通过 SSL 连接时出错(远程主机在握手期间关闭连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24885833/
我正在使用的网站上有一个非 Canvas 导航。关闭 Canvas 导航的默认状态是关闭的,这在移动网站上运行良好,因为您可以打开它并选择您的链接,但在桌面上关闭它并打开它会隐藏用户的信息,我希望它是
我有一个 NSViewController 是这样连接的: 在底部 viewController 中,我尝试使用 self.dismiss(self) 关闭它,但是,它会产生此错误: [General
我昨天制作了一个扩展的 JQuery 搜索框,它的作用就像一个魅力!但是,我在创建一个脚本时遇到问题,当用户单击搜索框时,它会关闭。 这是我的 JQuery: function expandSearc
我一辈子都无法在 API V3 中一次只显示一个信息窗口。我需要一个在下一次开放之前关闭。还希望在 map 上的任何地方关闭 infoWindow onclick。这是否在初始化函数中? 这是我的完整
关闭和清理套接字的正确方法是什么? 我在辅助线程中运行 io_service,我需要关闭与主线程的连接: void closeConnection() { ioc.post([&socket]
我的 Selenium 测试看起来像这样:客户选择金融产品,填写一些必要的数据,并在打印预览中显示条款/协议(protocol)文档(根据本地法律的要求)。打印/关闭打印预览对话框后,客户输入更多数据
我目前正在从 android 网站了解 Navigation Drawer,我正在使用他们的示例 http://developer.android.com/training/implementing-
尝试通过 expo 在模拟器上运行 react-native 应用程序时出现此错误。 Couldn't start project on Android: Error running adb: adb
方法一 function transform(ar) { var alStr = []; for(var i=0; i
我想按以下方式自定义我的抽屉导航: 我希望在抽屉打开时显示一个图标,在抽屉关闭时显示另一个图标,而不是将菜单图标稍微向左滑动的当前默认动画。 关于我在哪里可以找到类似内容的任何想法/线索? 我做了一些
我们刚刚从 0.6.2 或 0.7 升级了我们的 dropwizard 版本,发现 .yml 文件中的很多配置都发生了变化。尽管我们能够弄清楚其中的大部分,但我们无法弄清楚如何关闭“requestLo
从 celery 2.4.5 升级后,我开始让 celery 随机关闭。 我在 centOS 机器上使用 celery 3.0.12、boto 2.6 和 amazon sqs 和 django 1.
我试图包含一些语句来指导用户更多地了解文件无法打开或关闭的原因。文件在写入模式下无法打开的一些可能情况是什么?无法关闭怎么办? FILE *fp; if(!(fp = fopen("testing",
我有一个DLL,可以访问数据库并从存储在配置文件中的应用程序设置中读取连接字符串。然后,引用此DLL的应用程序将需要在其配置文件中为此配置设置设置值。 我遇到的问题是,生成的配置代码会通过Defaul
我将 UIDatePicker 添加为 UITextField 的输入 View UIDatePicker *oBirth; NSDateFormatter *dateFormat; _edit
我有以下代码: SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondVie
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
通常,按下 option 键关闭窗口会关闭应用程序中的所有窗口。在我的应用程序中,我希望它仅关闭与用户正在关闭的窗口相关的窗口。我怎样才能做到这一点?我可以为所有窗口实现 windowShouldCl
我有一个 NSWindow,它托管一个已连接到脚本处理程序的 WebView。 现在,当用户单击 WebView 上的控件上的按钮时,它会调用我的对象上的 Objective C 方法。 在这种特定情
我想根据 MBP 上的相机使用情况自动化个人工作流程。 基本上我想知道是否任何 的摄像头(内置或 USB)已打开或关闭,因此我可以运行我将创建的程序或脚本。 我认为如果我需要轮询相机状态也可以,但基于
我是一名优秀的程序员,十分优秀!