0
Windows-MY 인스턴스에서 인증서를 읽을 수 있어야하는 Java 애플릿을 개발 중입니다. 이것은 내가 할 수 있고 잘 작동하는 부분입니다. 내 문제는 PIN 코드 (편집 텍스트 컨트롤을 통해 제공됨)를 입력하면 Windows 인증서 관리자가 동일한 PIN 코드를 다시 묻습니다.Java에서 핀/암호로 Windows-MY 키 저장소를로드하는 방법은 무엇입니까?
저는 약간의 질문이 있으며, 저를 도울 수 있다면 매우 감사 할 것입니다.
- 내 코드에서 무엇이 잘못 되었습니까?
EditText
제어를 통해 제공되는 PIN을 사용하지 않는 이유는 무엇입니까? 그것을 성취하는 방법? - 그럴 수 없다면 PKCS # 12 디지털 인증서가 PKCS # 11 스마트 카드 인증서와 같은 방식으로 작동합니까? 정확히 말하면 PKCS # 11과 같은 방식으로 PIN을 묻는가? 그렇다면 PIN에 대한 내 필드를 제거하고 Windows가 해당 작업을 수행 할 수있게해야합니다.
keystore = KeyStore.getInstance("Windows-MY", "SunMSCAPI"); keystore.load(null,_PIN); String aliass = (String) aliasses.nextElement(); X509Certificate oPublicCertificate = (X509Certificate) keystore.getCertificate(alias); PrivateKey oPrivateKey = (PrivateKey) keystore.getKey(alias,null); if(oPrivateKey == null) continue; if(aliass != alias) continue; System.out.println("Sign with alias:"+aliass); System.out.println("gettype:"+oPublicCertificate.getType()); System.out.println("serial:"+oPublicCertificate.getSerialNumber()); System.out.println("Public Key:"+oPublicCertificate.getPublicKey()); _PK = Base64Utils.base64Encode(oPublicCertificate.getPublicKey().getEncoded()); System.out.println("Public Key:"+_PK); Provider p = keystore.getProvider(); // data to sign byte[] data ="Data for signing".getBytes(); // Signing the data Signature sig = Signature.getInstance("SHA1withRSA"); sig.initSign(oPrivateKey); sig.update(data); byte[] signature = sig.sign(); //<--- Here asks for PIN second time. System.out.println("Signature.sign():" + signature); Signature verifier = Signature.getInstance("SHA1withRSA", p); verifier.initVerify(oPublicCertificate); verifier.update(data); boolean isValidSignature = verifier.verify(signature); System.out.println("the verification result "+ isValidSignature);
내가 다른 접근 오픈 오전이 문제를 해결하기 :
여기 내 애플릿에서 사용되는 코드의 일부입니다.