Мы использовали собственное собственное хранилище ключей, а также предоставили пользовательскую реализацию класса с использованием JSSEImplementation и ServerSocketFactory и настроены как в server.xml для атрибутов «store», так и «sslImplementation».с использованием пользовательского хранилища ключей и jsseimplementation при обновлении до tomcat 8.5
Но теперь обновление до 8.5, я начал получать много ClassNotFoundException для JSSESocketFactory и т.д.
Doing немного больше исследований я обнаружил, что они удалили много классов и методов как JSSESocketFactory.java, getServerSocketFactory(), getSSLUtil (AbstractEndpoint конечной точки) и т.д.
Итак, мой вопрос:
есть ли способ в Apache Tomcat 8.5, в котором я могу настроить мой пользовательское хранилище ключей в разделе «магазин» в server.xml
и использовать свой собственный sslImplementation?
я использовал AbstractEndpoint в сигнатуре метода, чтобы получить название магазина, установленный в server.xml
, а затем загружаются в хранилище ключей, что MyJSSESocketFactory так:
public class MySSLImplementation extends JSSEImplementation
{
@Override
public org.apache.tomcat.util.net.ServerSocketFactory getServerSocketFactory(
AbstractEndpoint endpoint) {
kStore = endpoint.getProperty("store");
return new MyJSSESocketFactory(endpoint, kStore);
}
}
public class MyJSSESocketFactory extends JSSESocketFactory {
private final AbstractEndpoint _endpoint;
private final String store;
public MyJSSESocketFactory(AbstractEndpoint endpoint, String store) {
super(endpoint);
this._endpoint = endpoint;
this.store = store;
}
/*
* Gets the SSL server's keystore.
*/
@Override
protected KeyStore getKeystore(String type, String provider, String pass)
throws IOException {
if ("MYKS".equalsIgnoreCase(type)) {
String keystoreName = store;
KeyStore ks = null;
try {
if (provider == null || provider.isEmpty()) {
ks = KeyStore.getInstance(type);
} else {
ks = KeyStore.getInstance(type, provider);
}
MyStoreParameter params = new MyStoreParameter(
keystoreName);
ks.load(params);
} catch (Exception ex) {
throw new IOException(
"Failed to load keystore " + keystoreName, ex);
}
return ks;
} else {
return super.getKeystore(type, provider, pass);
}
}
}
«MYKS» установлен в server.xml для «магазина» атрибута
Привет: Я считаю, что ответ «да», и решение, чтобы определить свои собственные настройки, используя JSSE (против , очевидно, теперь устаревшие API Tomcat). Я смог найти только одну статью о том, как вы могли бы это сделать: http://www.angelfire.com/or/abhilash/site/articles/jsse-km/customKeyManager.html – paulsm4
Мне любопытно .. зачем вам нужна ваша 'SocketFactory'? –