Conexão segura entre terminal em java e o servidor central

Olá Pessoal, boa tarde.
Eu preciso desenvolver um programa simples em java e preciso da vossa opinião sobre segurança.

O programa irá ler um código de barras do cartão e irá atribuir um prêmio em dinheiro para o cliente que possui o cartão.
Esse valor será enviado para nosso servidor central que armazenará todos os prêmios que os clientes irão ganhar nessas lojas.

Eu gostaria de saber qual a melhor forma de fazer a conexão com o programa instalado na loja e o nosso servidor para que a troca de informação seja segura.

Agradeço a vossa ajuda.

É bom pesquisar e ver qual algoritmo de encriptação que está sendo mais utilizado, seus prós e contras.
Que tipo de comunicação estamos falando, HTTP ? Socket ?

Olá nel. Obrigado pelo seu tempo.

Então, isso que eu queria saber também, qual a melhor solução para a comunicação?
Tinha pensado em http e usar um certificado SSL além do algoritmo de encriptação.

Seria a melhor solução? (falando em segurança, flexibilidade e performance).
Performance seria muito importante, uma vez que o programa estará instalado nos caixas e os clientes não gostam de demora.

Sou inciante em java, essa solução que pensei acima seria como eu faria se fosse em php.
Agradeço a vossa ajuda.

A criptografia adiciona relativamente pouco tempo à sua solução. Portanto não deve ser esse o problema na sua aplicação.
Você pode tentar usar https mesmo - não é difícil e a implantação da solução (tanto no cliente quanto no servidor) não requer muito código, a parte mais chata é gerar um certificado para cada terminal para você poder identificar o terminal a partir do certificado, e instalar esse certificado no keystore.

[quote=entanglement]A criptografia adiciona relativamente pouco tempo à sua solução. Portanto não deve ser esse o problema na sua aplicação.
Você pode tentar usar https mesmo - não é difícil e a implantação da solução (tanto no cliente quanto no servidor) não requer muito código, a parte mais chata é gerar um certificado para cada terminal para você poder identificar o terminal a partir do certificado, e instalar esse certificado no keystore. [/quote]

Olá.
Eu entendo a necessidade do certificado para cada terminal (identificar se o terminal é realmente um cliente nosso), mas se usar SSL (https) é necessário a utilização de um certificado em cada terminal? Só o certificado SSL não seria suficiente?

[quote=filipe_moraes][quote=entanglement]A criptografia adiciona relativamente pouco tempo à sua solução. Portanto não deve ser esse o problema na sua aplicação.
Você pode tentar usar https mesmo - não é difícil e a implantação da solução (tanto no cliente quanto no servidor) não requer muito código, a parte mais chata é gerar um certificado para cada terminal para você poder identificar o terminal a partir do certificado, e instalar esse certificado no keystore. [/quote]

Olá.
Eu entendo a necessidade do certificado para cada terminal (identificar se o terminal é realmente um cliente nosso), mas se usar SSL (https) é necessário a utilização de um certificado em cada terminal? Só o certificado SSL não seria suficiente?[/quote]

Se você não tem um certificado no servidor, como ele vai validar uma conexão HTTPS ?
Talvez você consiga algo com replicação, mas isso é uma suposição minha. O teu servidor precisa confirmar que aquela conexão HTTPS é realmente válida e pertence ao certificado em que ele está instalado. Senão, ele poderia aceitar qualquer conexão, mesmo de certificados que deveriam ser considerados inválidos.

Você pode ter apenas um certificado no servidor (como é o caso de uma conexão SSL normal em um browser quando você está se conectando ao site seguro de um banco, por exemplo), mas nesse caso você precisa também ter alguma identificação segura para cada terminal (exatamente como é o caso de um cliente de um banco).
Se quiser gerar um certificado separado para cada terminal, então é relativamente simples determinar, através de um campo do certificado que você gerar, qual foi o certificado usado.