OpenAM을 사용한 SAML 할당 암호화

SAML Support 의 암호화 기능은 무엇입니까?


당사의 OSS 기술은 OpenAM의 개발과 지원을 진행하고 있습니다.
SAML은 OpenAM이 아니라 OpenAM도SAML이 아니에요. 제가 SAML을 살짝 쓸게요.

SAML 결단?


SAML에 관해서는 지금은 자세히 쓰지 않지만 관련 사항을 간단하게 살펴본다.
SAML은 제휴(단일 서명)에 사용되는 프로토콜로 G-Suites, Office 365, SAlesforce, AWS 등 주요 클라우드 서비스를 지원한다.
SAML에는 IdP(인증서버)와 SP(위탁인증, 인증정보를 사용하는 응용서버) 두 가지 역할이 있는데 이 IdP에서 SP로 흐르는 인증정보를 결단이라고 한다.
SAML 분배는 XML 정보이기 때문에 암호화할 때 XML의 암호화 규약xmlenc을 사용한다.
Firefox의add-on SAML-tracer를 사용하여 암호화되지 않을 때의SAML 결단을 보십시오.

아주 평범한 XML입니다.
SAML 결정의 암호화는 이 XML의 중요한 부분을 암호화하는 것이다.

XML 암호화 메커니즘


그렇다면 XML은 어떻게 암호화됩니까? 두 가지 암호를 사용했습니다.

공개 키 암호화 방식


IDP에서 SP로 전달되는 공용 키를 암호화합니다.
공공 키 암호화 방식보다 계산에 더 많은 시간이 걸리기 때문에SAML 분배를 암호화하지 않고 공공 키만 암호화할 수 있다.
암호화에 사용되는 공용 키는 IdP에서 SP의 공개 키로 암호화한 후 SAML 할당과 함께 전송됩니다.

공통 키 암호화 방식


SAML 결단을 암호화하는 데 사용됩니다.
공개 키 암호화 방식에 비해 계산 시간이 짧기 때문에 전체SAML 분배를 암호화하는 데 사용됩니다.

SAML 결정 암호화


SAML 결단의 암호화를 알면서도 설정해 보세요.

OpenAM에서 SAML 할당 암호화 설정


특별히 어려운 것은 없습니다. 다만 아래의 복선상자를 검사해 보십시오.

Firefox의add-on SAML-tracer로 아까와 같이 암호화된SAML 결단을 시도해 보세요.

그림이 이해하기 어려워서 일부분을 발췌하였다.
방금 설명한 두 가지 암호화 방식을 사용했다.

共通鍵暗号方式(SAMLアサーションの暗号)
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" /> 
公開鍵暗号方式(共通鍵の暗号)
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> 

아...잘못


위의 설명이 약간 유출되었지만 이번 SP에서 사용하는 소프트웨어는 shibboleth입니다.
OpenAM에서 SAML 결단을 받으면 다음과 같은 오류 화면이 나타납니다.

HTML 오류 메시지만 자세히 알 수 없기 때문에/var/log/shibboleth/shibd.로그만 봐도 shib인 줄 알아요.logxmlenc#rsa-1_5는 허용되지 않습니다...암호를 해독하는 중 오류가 발생했습니다.
2018-11-30 16:44:30 WARN XMLTooling.Decrypter [2] [default]: XMLSecurity exception while decrypting key: XSECAlgorithmMapper::mapURIToHandler - URI http://www.w3.org/2001/04/xmlenc#rsa-1_5 disallowed by whitelist/blacklist policy

만약 기능이 없다면 코드를 추가하는 것이 좋지 않겠는가


빵이 없으면 케이크를 먹으면 좋잖아요.

RSAES-PKCS1-v1_5 없는 방향으로...


SAML 결단의 암호화는 그다지 환영을 받지 못하는 기술로, 각양각색의 웹 서비스에 'SAML 암호화 닫기' 라는 주석이 있다
RSA-1.5가 허용되지 않는 세계라면 사용할 수 있도록 개조RSA-OAEP해야 한다.
어쨌든 코드부터 봅시다.
다음 설치는 OpenAM 코드에서 수행됩니다.RSA면 1.5 룰이야.
FMEncProvider.java

  if (publicKeyEncAlg.equals(EncryptionConstants.RSA)) {

    cipher = XMLCipher.getInstance(XMLCipher.RSA_v1dot5);

  } else if ...
후방 호환성에 신경 쓰지 말고 RSA-OAEP만을 단순히 생각한다면 다음과 같다.

  if (publicKeyEncAlg.equals(EncryptionConstants.RSA)) {

    cipher = XMLCipher.getInstance(XMLCipher.RSA_OAEP);

  } else if ...
당사는 업데이트된 고객을 따라가야 하기 때문에 고급 설정에usersaOAEP이라는 설정을 추가합니다. 만약 그 파라미터가 사실이라면 RSAOAEP를 사용하여 암호화된 코드입니다.

  if (publicKeyEncAlg.equals(EncryptionConstants.RSA)) {

    if (useRSAOAEP) {
      cipher = XMLCipher.getInstance(XMLCipher.RSA_OAEP);
    } else {
      cipher = XMLCipher.getInstance(XMLCipher.RSA_v1dot5);
    }

실식 테스트


이전과 마찬가지로 Firefox의add-on SAML-tracer에서 암호화할 때의SAML 결단을 살펴본다.

캡처는 식별하기 어려워서 발췌한 것이다.
공개 키 암호화 방식이rsa-oaep-mgf1p로 바뀐 거 아세요?

共通鍵暗号方式(SAMLアサーションの暗号)
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
公開鍵暗号方式(共通鍵の暗号)
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />

기능을 원한다면 직접 쓰는 것이 오픈 소스의 기본이다.바느질

좋은 웹페이지 즐겨찾기