[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..cer 인증서에는 공개 키만 포함되어 있으므로 공개 키는
를 정의하면 안됩니다. 개인용으로 만 사용할 수 있습니다. 간단하게 adfssigning 항목을 가져 와서 Spring SAML 샘플 응용 프로그램과 마찬가지로 개인 키를 포함시켜야합니다. .cer 인증서에는 공개 키만 포함되어 있으므로 공개 키는
를 정의하면 안됩니다. 개인용으로 만 사용할 수 있습니다. 간단하게 adfssigning 항목을 가져 와서 Spring SAML 샘플 응용 프로그램과 마찬가지로 개인 키를 포함시켜야합니다. SAML 키 저장소에는 공개 키와 비공개 키의 두 가지 기본 유형 (인증서 포함)이 포함될 수 있습니다. 각 키에는이를 참조하는 데 사용되는 별칭이 있습니다. 키스트 아 자체는 패스워드 (2 번째의 생성자 파라미터로 제공된다)에 의해 보호 할 수 있습니다. 또, 각각의 비공개 키는, 추가의 패스워드에 의해 보호 할 수도 있습니다. 이것은, 별명 -> 패스워드 맵의 3 번째의 파라미터로 정의됩니다. 키 스토어에 임포트 한 공개 키 (위의 커멘드와 같게)는이 맵으로 정의하지 말아주세요. 추가 선언없이 가져온 후에 자동으로 사용할 수 있습니다. Spring SAML이 작동하려면 키 저장소에 최소한 하나의 개인 키가 있어야하며 (샘플 응용 프로그램에는 별칭 apollo라는 개인 키가 포함되어있다.) 별칭은 생성자의 세 번째 매개 변수에 제공되어야한다.
위의 예는 공개 키를 가져 왔지만 개인 키에만 사용할 수있는지도에 포함했기 때문에 실패합니다.
-
==============================
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.이 오류는 키 저장소에 개인 키가없는 경우에도 발생합니다. 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에서 공개 인증서를 추가하는 것을 잊지 마십시오. 그럼 갈 준비가되어 있어야합니다.
from https://stackoverflow.com/questions/26164109/trusted-certificate-entries-are-not-password-protected-spring-saml by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 내 맞춤 Wicket 모델 클래스에 Spring bean을 주입하려면 어떻게해야합니까? (0) | 2019.02.13 |
---|---|
[SPRING] 설정에서 'service'타입의 bean 정의 [Spring boot] (0) | 2019.02.13 |
[SPRING] Spring을 멈춘다 일정 시간이 지나면 멈춘다. (0) | 2019.02.13 |
[SPRING] 스프링 데이터 JPA 감사를 orm.xml 파일없이 (JavaConfig를 대신 사용하여) 사용할 수 있습니까? (0) | 2019.02.13 |
[SPRING] 지도 목록으로 Spring에서 배치 업데이트를 수행하는 방법은 무엇입니까? (0) | 2019.02.13 |