Я пытаюсь создать HttpsServer / Client, чтобы я мог создать прокси-сервер для проверки трафика, поступающего из браузера на сервер.Эти типы инструментов неоценимы для людей, которые проверяют безопасность веб-приложений.Я решил использовать httpclient для отправки запросов и компонентов httpcore для моего сервера.В данный момент я просто пытаюсь установить соединение через ssl-сокет между браузером и сервером через порт 8080. Я прочитал все до конца и до сих пор не могу заставить это работать.Вот шаги, которые я сделал до этого момента:
Создал сертификат CA с помощью keytool и добавил его в файл с именем cacerts
Я добавилэтот сертификат для экземпляра браузера Firefox, прослушивающего порт 8080
В моем коде я делаю следующее, чтобы вызвать этот сертификат в коде сервера
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);
Затем, когда я вызываю команду accept для сокета, как показано ниже, я получаю следующее исключение:
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();
Любые идеи о том, чтоя здесь не так делаю?Просто пытаясь установить соединение через сокет ssl с портом 8080, на который браузер отправляет свои запросы.
Обновление 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());
Iзнаю, что этот файл правильно захватывает, потому что, если пароли неверны, я получаю исключения.Тем не менее, я все еще получаю то же исключение.Любые идеи, что попробовать дальше?
Вот что находится внутри 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?