xmlsec1을 사용한 InCommon SAML 메타데이터에 대한 서명 확인이 실패함

xmlsec1을 사용한 InCommon SAML 메타데이터에 대한 서명 확인이 실패함

인커먼 페더레이션IdP 및 SP 메타데이터를 제공합니다. 새로 고침 정책에서는 자주 확인하도록 권장합니다.메타데이터 집계최신 버전을 사용하려면. InCommon SP를 적극 권장합니다.메타데이터 새로 고침 및 확인적어도 매일.

다음에 제공된 지침을 따르십시오.메타데이터 소비페이지에서 집계를 다운로드하고 메타데이터 서명 인증서의 정품 복사본을 얻습니다.

그런 다음 "다운로드한 메타데이터의 XML 서명을 확인"합니다. 여기에 문제가 있습니다. 다운로드한 메타데이터를 확인할 수 있습니다내장된 x509 인증서 사용, 그러나 별도로 다운로드한 메타데이터 서명 인증서를 사용하여 확인할 수는 없습니다.

InCommon에서 두 개의 파일을 다운로드했습니다.

  • XML:InCommon-metadata-idp-only.xml
  • 개인 서명 키:inc-md-cert.pem

나는 다음 명령을 실행할 수 있어야 한다고 생각했습니다.

# xmlsec1 --verify \
     --id-attr:ID urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor \
     --privkey-pem ./inc-md-cert.pem \
     ./InCommon-metadata-idp-only.xml

"./inc-md-cert.pem에서 개인 키를 로드하지 못했습니다."라는 메시지가 표시되지 않습니다. 을 사용하여 유효한 키가 포함되어 있는지 확인할 수 있습니다 openssl x509 -text -in ./inc-md-cert.pem. (읽을 수 있고 올바른 경로입니다.) --privkey-pem또는 으로 참조하면 같은 방식으로 실패합니다 --pubkey-pem.

이제 대신 사용하면 --pubkey-cert-pem ./inc-md-cert.pem오류 없이 실행되어 OK SignedInfo References (ok/all): 1/1.

하지만 아니요, 내 개인 서명 키를 분명히 무시하고 단순히 메타데이터.xml 파일에 포함된 키를 기반으로 확인을 수행하는 것입니다. (인수를 완전히 제거할 수 --pubkey-cert-pem있으며 내장된 x509 인증서를 사용하여 확인이 계속 작동합니다.

업데이트

제공된 서명 파일이 조직에 의해 자체 서명된 것이므로 신뢰할 수 있는 인증서로 추가해 보았습니다. 예를 들어 openssl을 사용하여 기본 확인을 시도하는 경우 다음을 비교하십시오.

# openssl verify ./inc-md-cert.pem
error 18 at 9 depth lookup:self signed certificate
# openssl verify -CAfile ./inc-md-cert.pem ./inc-md-cert.pem
./inc-md-cert.pem: OK

그렇다면 그게 문제라면 어떨까요? 그래서 --trusted-pem옵션 을 추가해보려고 합니다

# xmlsec1 --verify \
     --id-attr:ID urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor \
     --privkey-pem ./inc-md-cert.pem \
     --trusted-pem ./inc-md-cert.pem \
     ./InCommon-metadata-idp-only.xml
func=xmlSecOpenSSLAppKeyLoadBIO:file=app.c:line=263:
   obj=unknown:subj=PEM_read_bio_PrivateKey and PEM_read_bio_PUBKEY:
   error=4:crypto library function failed: 
func=xmlSecOpenSSLAppKeyLoad:file=app.c:line=153:
   obj=unknown:subj=xmlSecOpenSSLAppKeyLoadBIO:
   error=1:xmlsec library function failed:
   filename=/tmp/inc-md-cert.pem;errno=2
func=xmlSecAppCryptoSimpleKeysMngrKeyAndCertsLoad:file=crypto.c:line=118:
   obj=unknown:subj=xmlSecCryptoAppKeyLoad:
   error=1:xmlsec library function failed:uri=./inc-md-cert.pem
Error: failed to load public key from "./inc-md-cert.pem".
Error: keys manager creation failed

내 입장에서는 이것이 그다지 어렵지 않기 때문에 근본적인 오류가 있다고 생각합니다. 외부 키(InCommon에서 제공)를 사용하여 메타데이터 파일(InCommon에서 제공)의 서명을 확인하려면 어떻게 해야 합니까?

답변1

약간 만족스럽지는 않지만 한 가지 해결책은 다음과 같습니다.

a) InCommon 메타데이터 파일을 확인합니다.내장된 인증서 사용.

# xmlsec1  --verify --id-attr:ID \ 
        urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor  \
       ./InCommon-metadata-idp-only.xml
OK
SignedInfo References (ok/all): 1/1
Manifests References (ok/all): 0/0

b) 그런 다음 내장된 인증서를 별도로 다운로드한 인증서와 간단히 비교하십시오. 모듈로 공백이 일치해야 합니다. 하나 또는 다른 인증서가 연결될 수 있으므로 비교를 위해 무시해야 합니다.

답변2

꽤 많은 어려움을 겪은 끝에 --enabled-key-data명령줄에 다음을 추가해 볼 수 있다는 것을 알게 되었습니다. 예를 들면 다음과 같습니다.

--enabled-key-data rsa 또는 --enabled-key-data x509

둘 중 하나가 작동해야 합니다. 당신은 또한 시도할 수 있습니다

xmlsec1 --list-key-data선택할 수 있는 항목을 보려면

귀하의 경우에는

xmlsec1 --verify \
  --enabled-key-data rsa \
  --id-attr:ID urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor \
  --pubkey-cert-pem ./inc-md-cert.pem \
  ./InCommon-metadata-idp-only.xml

당신이 원하는 것을해야합니다.

관련 정보