Pergunta

Eu tenho um problema.

Temos um mecanismo de interface centralizado que conversará com um serviço da Web que fornecerá complemento de informações e permitirá enviar solicitações a sistemas externos. Tudo isso é bom e bom até que tenhamos que integrar isso com a segurança necessária deste provedor.

Eles emitem certificados distribuídos através de cartões inteligentes (chave USB) que o usuário final deve usar para que o software interaja com o referido sistema (os serviços da Web). Eles insistem em que a assinatura (às vezes múltipla) seja feita contra o certificado do usuário final em sua chave USB. A chave privada é, é claro, protegida por senha.

Como faço para conectar o Axis2 que lidará com tudo isso aos certificados que estão no computador do usuário final.

O sistema é principalmente aplicativo de cliente espesso legado no Delphi 5, o mecanismo de interface interage principalmente com o banco de dados. Agora, conseguimos conectar um código que conecta efetivamente a estação do usuário final ao servidor de interface por meio de um soquete TCP simples.

---- EDITAR ----

Implementamos a solução com interceptor de assinatura personalizado no CXF (alteramos do eixo) que encaminhava o conteúdo da mensagem para um proxy de assinatura que, por sua vez, encontraria e conectaria o serviço de assinatura correto em execução na sessão interativa do usuário de onde a solicitação original veio.

Aceitei a resposta de Eugene porque, apesar de não termos usado os componentes que ele especificou, implementamos a solução que seguiu as diretrizes gerais de sua proposta.

Não há como escapar do fato de que a assinatura deve ser feita em uma sessão interativa do usuário por causa do token USB. Restrições adicionais foram impostas devido ao fato de usarmos sistemas herdados e à necessidade de que o sistema funcione em um ambiente compartilhado (servidor de desktop remoto). Embora seja possível, não é naturalmente suportado pelas estruturas de serviço da Web ou bibliotecas criptográficas.

Foi útil?

Solução

Se você tiver o certificado residente no token USB do cliente, a assinatura (como operação criptográfica) deve ser realizada no lado do cliente. Se você pode modificar este aplicativo Delphi, pode usar SecureBlackBox para assinar. Não sei nada sobre o Axis2, mas se ele permitir a criação e a conectamento dos módulos criptográficos personalizados, você fará um que receberá um hash (que é o que é realmente assinado) e o enviará ao cliente para assinar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top