2014-09-05 2 views
0

Я использую 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, но никаких сертификатов не поступало с сервера.

+0

Вам, по крайней мере, нужно было бы установить параметры хранилища ключей на клиенте и почти наверняка параметры хранилища доверия на сервере. – Bruno

+0

Спасибо @Bruno за предложение. Я добавил информацию о клиенте на клиенте, расслабив costraint для wantClientAuthentication, но сертификат не отправляется от клиента (у меня есть фильтр на сервлете и request.getClientInfo(). GetCertificates(); возвращает пустой список –

+0

@Bruno, путем создания хранилища доверенных сертификатов на сервере сертификации. К сожалению, request.getClientInfo(). GetCertificates() по-прежнему пуст, любая идея почему? –

ответ

0

Я нашел проблему. Очевидно, сервер не начинает запрашивать сертификаты клиенту до тех пор, пока на сервере не будет настроено хранилище доверия. Конфигурируя хранилище доверия, взаимная сертификация выполняется правильно.

Смежные вопросы