package WEBPIECESxPACKAGE;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import org.webpieces.nio.api.SSLEngineFactory;
public class WebSSLFactory implements SSLEngineFactory {
private String serverKeystore = "/keystore.jks";
private String password = "password";
public WebSSLFactory() {
//since this bites a lot of people, let's read in the keystor early
try(InputStream keySt = WebSSLFactory.class.getResourceAsStream(serverKeystore)) {
if(keySt == null)
throw new IllegalStateException("keystore was not found");
} catch(IOException e) {
throw new RuntimeException(e);
}
}
@Override
public SSLEngine createSslEngine() {
// Create/startPing the SSLContext with key material
try(InputStream keySt = WebSSLFactory.class.getResourceAsStream(serverKeystore)) {
char[] passphrase = password.toCharArray();
// First startPing the key and trust material.
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(keySt, passphrase);
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
//****************Server side specific*********************
// KeyManager's decide which key material to use.
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, passphrase);
sslContext.init(kmf.getKeyManagers(), null, null);
//****************Server side specific*********************
SSLEngine engine = sslContext.createSSLEngine();
engine.setUseClientMode(false);
return engine;
} catch(Exception e) {
throw new RuntimeException(e);
}
}
}