Я должен настроить действительно легкий сервер HTTPS для JAVA-приложения. Это - средство моделирования, это используется в наших лабораториях разработки для моделирования Подключений HTTPS, принятых элементом оборудования в дикой природе. Поскольку это - просто легкое средство разработки и не используется в производстве всегда вообще, я довольно рад обойти сертификации и столько согласования, сколько я могу.
Я - планирование использования HttpsServer
класс в Java 6 SE, но я изо всех сил пытаюсь получить его работа. Как тестовый клиент, я использую wget
из cygwin командной строки (wget https://[address]:[port]
) но wget
отчеты, что это "Не могло установить соединение SSL".
Если я работаю wget
с -d
опция для отладки его говорит мне "отказавшее квитирование SSL".
Я провел 30 минут, гугля это, и все, кажется, просто указывает назад на довольно бесполезную документацию Java 6, которая описывает методы, но на самом деле не говорит о том, как получить проклятую вещь разговор или обеспечить любой пример кода вообще.
Кто-либо может пошагово переместить меня в правильном направлении?
В итоге я использовал следующее:
try {
// Set up the socket address
InetSocketAddress address = new InetSocketAddress(InetAddress.getLocalHost(), config.getHttpsPort());
// Initialise the HTTPS server
HttpsServer httpsServer = HttpsServer.create(address, 0);
SSLContext sslContext = SSLContext.getInstance("TLS");
// Initialise the keystore
char[] password = "simulator".toCharArray();
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream fis = new FileInputStream("lig.keystore");
ks.load(fis, password);
// Set up the key manager factory
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, password);
// Set up the trust manager factory
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(ks);
// Set up the HTTPS context and parameters
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
httpsServer.setHttpsConfigurator(new HttpsConfigurator(sslContext) {
public void configure(HttpsParameters params) {
try {
// Initialise the SSL context
SSLContext c = SSLContext.getDefault();
SSLEngine engine = c.createSSLEngine();
params.setNeedClientAuth(false);
params.setCipherSuites(engine.getEnabledCipherSuites());
params.setProtocols(engine.getEnabledProtocols());
// Get the default parameters
SSLParameters defaultSSLParameters = c.getDefaultSSLParameters();
params.setSSLParameters(defaultSSLParameters);
} catch (Exception ex) {
ILogger log = new LoggerFactory().getLogger();
log.exception(ex);
log.error("Failed to create HTTPS port");
}
}
});
LigServer server = new LigServer(httpsServer);
joinableThreadList.add(server.getJoinableThread());
} catch (Exception exception) {
log.exception(exception);
log.error("Failed to create HTTPS server on port " + config.getHttpsPort() + " of localhost");
}
Чтобы создать keystore:
$ keytool -genkeypair -keyalg RSA -alias self_signed -keypass simulator \
-keystore lig.keystore -storepass simulator
См. также здесь.
Потенциально storepass и keypass могут быть разными, в этом случае ks.load
и kmf.init
должны использовать storepass и keypass, соответственно.