을 작동하지 않는, 그래서 내가 OpenSAML 서명 유효성 검사 건너 한 몇 가지 연구 결과를 쓸 것이다. OpenSAML (2.0)이 SAML 메타 데이터 (EntitiesDescriptor)에서 서명의 유효성 검사를 시도하는 방식과 관련된 문제가 있습니다. OpenSAML (2.0) EntitiesDescriptor 서명 검증은 내가 어떻게 표어 프로젝트에 버그를 기록하는 단서가 없다
나는 그러나 그것은 나를 항상 NullPointerException이 발생, 필사적으로 FilesystemMetadataProvider 내 SAML 메타 데이터 구조의 서명을 검증하기 위해 노력했다. 다른 곳에서도이 문제에 관한 다른 기사가 있지만 정확한 이유를 알 수있는 사람은 아무도 없습니다. 내가 처음 시도 이제 어떻게는 다음과 같이이었다 : org.opensaml.xml.signature.SignatureValidator.validate에
java.lang.NullPointerException이 :
FilesystemMetadataProvider provider = new FilesystemMetadataProvider(new File("metadata.xml"));
provider.setRequireValidMetadata(true);
provider.setParserPool(new BasicParserPool());
provider.initialize();
EntitiesDescriptor ed = provider.getEntitiesDescriptor("My Servers");
SignatureValidator validator = new SignatureValidator(getTrustedCredential());
validator.validate(ed.getSignature());
이 지속적으로 예외를 던지는 끝 (SignatureValidator.java:69)
XMLTooling 및 OpenSAML 클래스 주위 디버깅 후, 나는 오류의 이유를 발견했다. 문제는 해 XMLSignature가 org.opensaml.xml.signature.impl.SignatureImpl 클래스에서 처리되는 방식에있을 것 같다 : 이제 SignatureValidator는 주문 setXMLSignature에이 방법을 실행
public void releaseDOM() {
super.releaseDOM();
**this.xmlSignature = null;**
if (this.keyInfo != null) {
this.keyInfo.releaseChildrenDOM(true);
this.keyInfo.releaseDOM();
}
}
public XMLSignature getXMLSignature() {
return this.xmlSignature;
}
public void setXMLSignature(XMLSignature signature) {
this.xmlSignature = ((XMLSignature)prepareForAssignment(this.xmlSignature, signature));
}
() -> releaseDOM() getXMLSignature()는 EntitiesDescriptor의 유효성을 검사하지 못합니다. 그러나 다른 시그니처 유형에서는이 작업이 정상적으로 처리됩니다.
는 해결 방법으로 내가 서명의 유효성을 검사하기 위해 관리하는 두 가지 방법이 있었다 :1) SignatureImpl 클래스 엔지니어링 및 제거 반전 "this.xmlSignature = NULL을;" releaseDOM() 메소드
2) XML 파싱 및 비 정렬 화 (아래 그림 참조)이 문제를 본 다른
File file = new File("metadata.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(file);
UnmarshallerFactory unmarshallerFactory = Configuration.getUnmarshallerFactory();
Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(document.getDocumentElement());
EntitiesDescriptor ed = (EntitiesDescriptor) unmarshaller.unmarshall(document.getDocumentElement());
SignatureValidator validator = new SignatureValidator(getTrustedCredential());
validator.validate(ed.getSignature());
누구를 사용하여 서명 유효성 검사를 재 구현에서?