【发布时间】:2011-11-13 05:45:40
【问题描述】:
我正在尝试创建一个 HttpsServer/Client,以便我可以创建一个代理来检查从浏览器到服务器的流量。这些类型的工具对于测试 Web 应用程序安全性的人来说是无价的。我决定使用 httpclient 为我的服务器发送请求和 httpcore 组件。目前我只是试图在端口 8080 上建立浏览器和服务器之间的 ssl 套接字连接。我已经阅读了所有内容,但似乎仍然无法让它工作。以下是我到目前为止所做的步骤:
使用 keytool 创建 CA 证书并将其添加到名为 cacerts 的文件中
我将此证书添加到监听端口 8080 的 firefox 浏览器实例
-
在我的代码中,我执行以下操作以在服务器代码中调用该证书
KeyStore ks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream("C:\\Program Files\\Java\\jre6\\bin\\cacerts"), "password".toCharArray()); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(ks, "password".toCharArray()); SSLContext context = SSLContext.getInstance("TLS"); context.init(kmf.getKeyManagers(), null, null); ServerSocketFactory ssocketFactory = SSLServerSocketFactory.getDefault(); serversocket = ssocketFactory.createServerSocket(port);
然后当我在套接字上调用接受时,如下所示,我得到以下异常:
I/O error initialising connection thread: No available certificate or key corresponds to the SSL cipher suites which are enabled.
javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.checkEnabledSuites(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept(Unknown Source)
at DefaultHttpServer$RequestListenerThread.run(DefaultHttpServer.java:151)
这是抛出异常的行:
Socket socket = serversocket.accept();
关于我在这里做错了什么有什么想法吗?只是尝试与浏览器发送请求的端口 8080 建立 ssl 套接字连接。
11 月 13 日更新
到目前为止,我获取了您的一些信息并创建了一个单独的密钥库文件。这就是我所做的
C:\Users\Steve>keytool -genkey -alias serverprivkey -keystore privateKey.store
然后我将此文件 privateKey.store 从我的用户目录复制到我的项目文件夹中,并在我的代码中进行了以下更改:
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("privateKey.store"), "pass123".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "pass123".toCharArray());
我知道它正确地抓取了该文件,因为如果密码错误,我会遇到异常。但是,我仍然遇到同样的异常。有什么想法可以尝试下一步吗?
这是 privateKey.store 里面的内容:
C:\Users\Steve>keytool -list -v -keystore privateKey.store
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: serverprivkey
Creation date: Nov 13, 2011
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=sven rbera, OU=application developement, O=whs, L=san hjose, ST=
ca, C=ca
Issuer: CN=sven rbera, OU=application developement, O=whs, L=san hjose, ST
=ca, C=ca
Serial number: 4ec00a18
Valid from: Sun Nov 13 10:19:04 PST 2011 until: Sat Feb 11 10:19:04 PST 2012
Certificate fingerprints:
MD5: 9C:A7:2B:CE:DC:AD:5B:9C:D6:B7:71:6C:EC:91:8A:24
SHA1: 47:8F:9B:A2:E1:31:A5:D9:F6:71:8A:CA:3F:CB:BA:FC:C7:2D:F5:A8
Signature algorithm name: SHA1withDSA
Version: 3
如前所述,我已将密钥更改为现在使用 RSA。此外,我为 SSL 添加了调试标志并使其可用。完全理解它有点棘手,但看起来它找到了密钥 serverprivkey2 就好了。然后它进入 trustStore,我在该列表中看不到任何看起来像是来自我的东西。我真的不知道我应该在那个部分看到什么。有什么想法吗?
***
found key for : serverprivkey2
chain [0] = [
[
Version: V3
Subject: CN=steve, OU=labarbera, O=whs, L=sj, ST=ca, C=ca
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
Key: Sun RSA public key, 1024 bits
modulus: 140985119594686674696976228136679950023710897166974487014150510574037897724033913877362573524361519470364814271848450916151017718803985253447854099124509296799994400199293690731598145912452994962103007955337967369473821653235218532303270695076070736956288068926075705380732910518314547899958542901647381772169
public exponent: 65537
Validity: [From: Sun Nov 13 14:45:44 PST 2011,
To: Sat Feb 11 14:45:44 PST 2012]
Issuer: CN=steve, OU=labarbera, O=whs, L=sj, ST=ca, C=ca
SerialNumber: [ 4ec04898]
]
Algorithm: [SHA1withRSA]
Signature:
0000: C8 81 37 74 E9 7C A4 76 9F FD EC 8A 78 69 F2 A4 ..7t...v....xi..
0010: 64 1E C9 98 FD 99 FB 48 3D E2 C5 C5 EB A3 34 1B d......H=.....4.
0020: 7C BE B3 E4 F7 4D 90 F1 AB A6 4D 36 97 95 9B 95 .....M....M6....
0030: 90 C1 B9 28 9C DE A0 4A AD C7 10 8F 06 57 A6 2B ...(...J.....W.+
0040: 51 45 63 73 ED 1E AF 5F 61 E2 87 1A 7C CD 4E 3F QEcs..._a.....N?
0050: A7 18 15 FA 73 94 58 46 62 46 42 F9 31 12 2F C7 ....s.XFbFB.1./.
0060: 6E 6E A0 3F 17 FA A8 24 FC 68 83 88 E2 23 EF DE nn.?...$.h...#..
0070: E9 F5 58 AB 16 19 1B 82 72 C6 A0 A7 7E 41 36 1C ..X.....r....A6.
]
***
trustStore is: C:\Program Files\Java\jre6\lib\security\cacerts
trustStore type is : jks
trustStore provider is :
init truststore
adding as trusted cert:
... bunch certs none of which look familiar?
【问题讨论】: