Я использую restlet для создания канала HTTPS с сертификацией сервера и клиента. У меня нет проблем с сертификатом сервера (т. Е. С тем, что сервер подвергает сертификат и доверяет его клиенту), но я не знаю, как отправить сертификат клиента. Здесь ниже сервера важного кода:Сертификат отправки отправляющего клиента
Server server = component.getServers().add(Protocol.HTTPS, config.getInt("server.port"));
Series<Parameter> parameters = server.getContext().getParameters();
parameters.add("keystorePath", config.getString("keystore.path"));
parameters.add("keystorePassword", config.getString("keystore.password"));
parameters.add("keyPassword", config.getString("key.password"));
parameters.add("keystoreType",config.getString("keystore.type"));
/* true */
parameters.add("needClientAuthentication", config.getString("need.client.authentication"));
и конфигурации клиента, как это:
if(config.getBoolean("truststore.use")){
Series<Parameter> parameters = client.getContext().getParameters();
parameters.add("truststorePath", config.getString("truststore.path"));
parameters.add("truststorePassword", config.getString("truststore.password"));
// parameters.add("trustPassword", "password");
parameters.add("truststoreType", config.getString("truststore.type"));
parameters.add("keystorePath", config.getString("keystore.path"));
parameters.add("keystorePassword", config.getString("keystore.password"));
parameters.add("keyPassword", config.getString("key.password"));
parameters.add("keystoreType",config.getString("keystore.type"));
}
до тех пор, пока needClientAuthentication ложна все работает нормально. Установив needClientAuthentication в true, он начнет сбой, и ожидается, что я не отправлю сертификат клиента. Исключение rised имеет сообщение followint:
Software caused connection abort: recv failed
, но я понятия не имею, и не нашел ни одного примера о том, как отправить сертификат клиента.
Я даже добавил информацию о клиенте на клиенте и смягчил ограничение на сервере до wantClientAuthentication
, но никаких сертификатов не поступало с сервера.
Вам, по крайней мере, нужно было бы установить параметры хранилища ключей на клиенте и почти наверняка параметры хранилища доверия на сервере. – Bruno
Спасибо @Bruno за предложение. Я добавил информацию о клиенте на клиенте, расслабив costraint для wantClientAuthentication, но сертификат не отправляется от клиента (у меня есть фильтр на сервлете и request.getClientInfo(). GetCertificates(); возвращает пустой список –
@Bruno, путем создания хранилища доверенных сертификатов на сервере сертификации. К сожалению, request.getClientInfo(). GetCertificates() по-прежнему пуст, любая идея почему? –