2012-07-30 3 views
1

ECDSA를 사용하는 Siganture를 확인하기 위해 BouncyCastle을 사용하여 XMLSignature를 확인하는 데 문제가 있습니다. 마지막 줄에서Bouncycastle XmlSignatureFactory NoSuchAlgorithmException

BouncyCastleProvider provider = new BouncyCastleProvider(); 
Security.addProvider(provider); 
//some unrelated code 
XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM", provider); 

, 던져에 다음과 같은 예외 : 여기

는 관련 코드의 라인입니다

javax.xml.crypto.NoSuchMechanismException: java.security.NoSuchAlgorithmException: no such algorithm: DOM for provider SC 

나는

XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM"); 

에 라인을 변경하는 경우 나는

javax.xml.crypto.MarshalException: unsupported SignatureMethod algorithm: http://www.w3.org/2007/05/xmldsig-more#ecdsa-ripemd160 

누구나 아이디어를 얻었습니까?

답변

2

처음 오류가 발생하면 오류 설명에서 "해당 알고리즘 없음 : 공급자 SC의 DOM"을 읽을 수 있습니다. 그것은 "공급자"(BuncyCastle Security Provider)가 아니라 "공급자 SC"(Sun PC/SC 공급자)라고 말하기 때문에 이상합니다. 원하는대로 Bouncycastle을 사용하지 않는 것 같습니다 (내부적으로). 왜 이런 일이 일어나는지 알아야합니다. BC 라이브러리 및 클래스 경로 (응용 프로그램 서버로 작업하는 경우) 또는 공급자 순서 구성과 관련된 내용 일 수 있습니다.

두 번째 오류. XMLSignatureFactory를 가져 오는 접근 방식을 변경합니다.

이 방법은 원하는 메커니즘 유형의의 XMLSignatureFactory 구현을 를 찾아 인스턴스화 표준 JCA 프로 바이더 검색 메커니즘을 사용합니다 : 당신이 공급자를 지정하지 않는 경우 때문에 하나 때문에, 더 낫다. 등록 된 보안 목록 공급자를 가장 선호하는 공급자로 시작합니다. 지정된 메커니즘을 지원하는 첫 번째 공급자의 XMLSignatureFactory 객체가 반환됩니다.

하지만 지금은 알고리즘이 없습니다. 왜? 여기서 나는 BC가 사용되지 않는다고 말할 것입니다. 저기있어? 클래스 경로를 검토하십시오.

그것은 사용할 수있는 모든 공급자 목록에 도움이 될 수

for (Provider p : Security.getProviders()) { 

    log.debug(p.getName()); 
    log.debug(p.getInfo()); 
} 
내가 모든 공급자
+0

BouncyCastle 보안 제공자 v1.46가 표시됩니다 : "이름 : SC" "정보는 : BouncyCastle를 Security Provider v1.46 "이므로 SC는 BouncyCastle 공급자입니다. – billdoor

+0

단지 전체 항목이 있음을보고 목록을 때 – billdoor

+0

정말요? 이것에보십시오 : http://stackoverflow.com/q/10817964/980472 나는 BouncyCastle 이름이 "BC"공급자를 목록으로 만들 때. – jddsantaella