Pergunta

Eu consegui usar Sun MSCAPI provedor em meu aplicativo. O problema que estou tendo agora é que ele sempre aparece uma janela, pedindo uma senha, mesmo que eu forneci-lo no código. Este é um problema, porque eu preciso a funcionalidade de criptografia em um webservice.

Aqui está o código que eu tenho agora:

String alias = "Alias to my PK";
char[] pass = "MyPassword".toCharArray();

KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, pass);
Provider p =  ks.getProvider();

Signature sig = Signature.getInstance("SHA1withRSA",p);
PrivateKey key = (PrivateKey) ks.getKey(alias, pass)

sig.initSign(key);
sig.update("Testing".getBytes());
sig.sign();

Esse é um trabalho grande, mas eu recebo um pop-up pedindo a senha quando a última linha é executado. Como posso evitar isso?

Foi útil?

Solução

O provedor MSCAPI não suporta fornecer a senha para CAPI:

Um modo de compatibilidade é suportada para aplicações que assumem uma senha deve ser fornecido. Ele permite (mas ignora) uma senha non-null. O modo é ativado por padrão. (1)

Para definir a senha através do CAPI, você deve chamar CryptSetKeyParam com o KP_KEYEXCHANGE_PIN indocumentados ou KP_SIGNATURE_PIN e espero provedor de token de seu hardware subjacente suporta. (Eles não são completamente indocumentados - a documentação para Windows CE e Windows Mobile mencioná-los ( 2) e eles estão incluídos nos arquivos de cabeçalho).

Outras dicas

Meu palpite é que o Windows está aparecendo a aparecer.

Import sua chave novamente usando o Assistente de importação de certificados, mas certifique-se de que você não verificar a seguinte opção na tela "Senha".

[_] Ativar forte proteção de chave privada. Você será solicitado cada vez que a chave privada é usada por um aplicativo se você ativar esta opção.

resolvi essa configuração o provedor como follow problema:

signeData = gen.generate(content, ks.getProvider());

Onde

ks é um KeyStore e

genis um CMSSignedDataGenerator

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