복붙노트

[SPRING] 신뢰할 수있는 인증서 항목은 비밀번호로 보호되지 않습니다. Spring SAML

SPRING

신뢰할 수있는 인증서 항목은 비밀번호로 보호되지 않습니다. Spring SAML

내가 연결할 계획 인 IDP의 509 항목을 복사하여 testIdp.cer 파일을 생성했습니다. 다음 명령을 실행하여 JKS 파일을 만들었습니다.

keytool -importcert -alias adfssigning -keystore C:\Users\user\Desktop\samlKeystore.jks -file    C:\Users\user\Desktop\testIdp.cer

실행될 때 암호를 입력하라는 요청을 받았습니다. "이 인증서를 신뢰합니까? [no] :"라는 질문에 대해 "y"를 입력했습니다. "인증서가 키 스토어에 추가되었습니다"라는 메시지가 나타납니다.

그런 다음 securityContext.xml에 다음 세부 정보를 구성했습니다.

<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
    <constructor-arg value="classpath:security/samlKeystore.jks"/>
    <constructor-arg type="java.lang.String" value="mypassword"/>
    <constructor-arg>
        <map>
            <entry key="adfssigning" value="mypassword"/>
        </map>
    </constructor-arg>
    <constructor-arg type="java.lang.String" value="adfssigning"/>
</bean>

<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
  <property name="alias" value="adfssigning" />
  <property name="signingKey" value="adfssigning"/>     
</bean>

그러나 응용 프로그램을 실행하면 서버가 시작될 때와 응용 프로그램의 홈페이지를로드 할 때 다음 두 가지 예외가 발생합니다. 내가 다른 것을 놓친다면 누구든지 내게 알려 줄 수 있니?

이 예외는 서버를 시작할 때 발생합니다.

Caused by: org.opensaml.saml2.metadata.provider.FilterException: Signature trust establishment failed for metadata entry
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.verifySignature(SignatureValidationFilter.java:327)
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.processEntityGroup(SignatureValidationFilter.java:240)
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.doFilter(SignatureValidationFilter.java:158)
at org.opensaml.saml2.metadata.provider.AbstractMetadataProvider.filterMetadata(AbstractMetadataProvider.java:493)
at org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider.processNonExpiredMetadata(AbstractReloadingMetadataProvider.java:395)

이 예외는 내 애플리케이션의 홈페이지를 실행할 때 발생합니다.

java.lang.UnsupportedOperationException: trusted certificate entries are not password-protected
at java.security.KeyStoreSpi.engineGetEntry(Unknown Source)
at java.security.KeyStore.getEntry(Unknown Source)
at org.opensaml.xml.security.credential.KeyStoreCredentialResolver.resolveFromSource(KeyStoreCredentialResolver.java:132)

해결법

  1. ==============================

    1..cer 인증서에는 공개 키만 포함되어 있으므로 공개 키는 를 정의하면 안됩니다. 개인용으로 만 사용할 수 있습니다. 간단하게 adfssigning 항목을 가져 와서 Spring SAML 샘플 응용 프로그램과 마찬가지로 개인 키를 포함시켜야합니다.

    .cer 인증서에는 공개 키만 포함되어 있으므로 공개 키는 를 정의하면 안됩니다. 개인용으로 만 사용할 수 있습니다. 간단하게 adfssigning 항목을 가져 와서 Spring SAML 샘플 응용 프로그램과 마찬가지로 개인 키를 포함시켜야합니다.

    SAML 키 저장소에는 공개 키와 비공개 키의 두 가지 기본 유형 (인증서 포함)이 포함될 수 있습니다. 각 키에는이를 참조하는 데 사용되는 별칭이 있습니다. 키스트 아 자체는 패스워드 (2 번째의 생성자 파라미터로 제공된다)에 의해 보호 할 수 있습니다. 또, 각각의 비공개 키는, 추가의 패스워드에 의해 보호 할 수도 있습니다. 이것은, 별명 -> 패스워드 맵의 3 번째의 파라미터로 정의됩니다. 키 스토어에 임포트 한 공개 키 (위의 커멘드와 같게)는이 맵으로 정의하지 말아주세요. 추가 선언없이 가져온 후에 자동으로 사용할 수 있습니다. Spring SAML이 작동하려면 키 저장소에 최소한 하나의 개인 키가 있어야하며 (샘플 응용 프로그램에는 별칭 apollo라는 개인 키가 포함되어있다.) 별칭은 생성자의 세 번째 매개 변수에 제공되어야한다.

    위의 예는 공개 키를 가져 왔지만 개인 키에만 사용할 수있는지도에 포함했기 때문에 실패합니다.

  2. ==============================

    2.블라디미르 (Vladimir)는 오류가 발생한 이유를 정확하게 대답했다. 내 대답은 그 문제를 해결하기 위해 어떻게 인증서를 키 스토어로 가져올 수 있는지 보여주고 싶습니다.

    블라디미르 (Vladimir)는 오류가 발생한 이유를 정확하게 대답했다. 내 대답은 그 문제를 해결하기 위해 어떻게 인증서를 키 스토어로 가져올 수 있는지 보여주고 싶습니다.

    keytool로 직접 할 수없는 인증서와 개인 키를 가져와야합니다.

    자세한 설명은 https://stackoverflow.com/a/8224863/1909531에서 확인할 수 있습니다.

    다음은 발췌 부분입니다.

    openssl pkcs12 -export -in server.crt -inkey server.key \
               -out server.p12 -name [some-alias] \
               -CAfile ca.crt -caname root
    
    keytool -importkeystore \
        -deststorepass [changeit] -destkeypass [changeit] -destkeystore server.keystore \
        -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass some-password \
        -alias [some-alias]
    
  3. ==============================

    3.이 오류는 키 저장소에 개인 키가없는 경우에도 발생합니다. SAML은 개인 키를 사용하여 IDP와 통신하는 데 사용되는 서비스 공급자 메타 데이터를 생성합니다. 다음과 같이 Keystore에 하나를 추가하십시오. keytool -genkey -v -keystore some_key_store.jks -alias some_alias -keyalg RSA -keysize 2048 -validity 36500 질문을 작성하고 유효 기간을 적절한 일 수로 설정하십시오. (나의 예에서는 100 년 동안 유효하다) IDP에서 공개 인증서를 추가하는 것을 잊지 마십시오. 그럼 갈 준비가되어 있어야합니다.

    이 오류는 키 저장소에 개인 키가없는 경우에도 발생합니다. SAML은 개인 키를 사용하여 IDP와 통신하는 데 사용되는 서비스 공급자 메타 데이터를 생성합니다. 다음과 같이 Keystore에 하나를 추가하십시오. keytool -genkey -v -keystore some_key_store.jks -alias some_alias -keyalg RSA -keysize 2048 -validity 36500 질문을 작성하고 유효 기간을 적절한 일 수로 설정하십시오. (나의 예에서는 100 년 동안 유효하다) IDP에서 공개 인증서를 추가하는 것을 잊지 마십시오. 그럼 갈 준비가되어 있어야합니다.

  4. from https://stackoverflow.com/questions/26164109/trusted-certificate-entries-are-not-password-protected-spring-saml by cc-by-sa and MIT license