Computer >> 컴퓨터 >  >> 프로그램 작성 >> Redis

Redis Enterprise에 대한 보안 연결 활성화

서버에 대한 보안 연결을 활용하는 소프트웨어를 구축하는 것은 모든 개발자가 소유한 기술이어야 합니다. 특정 프로덕션 환경에서 SSL을 사용하지 않도록 선택하더라도 작업하는 모든 서버에 대한 연결을 보호하는 방법을 알고 있어야 합니다. 이 게시물은 Java 팬을 위해 Python에서 Redis Enterprise Cloud에 대한 보안 연결 활성화에 대한 약속된 후속 조치입니다.

이 게시물은 SSL을 사용하여 Redis Enterprise Cloud와 Java 클라이언트 프로그램 간의 암호화된 연결을 켜고 테스트하고 구성하는 쉬운 프로세스를 안내합니다. Java 프로그램에 SSL을 활성화할 때 혼란스러운 부분 중 하나는 인증서와 키를 Java가 이해할 수 있는 형식으로 변환하는 것입니다. 이것은 테스트와 프로세스의 구성 단계 사이에 몰래 들어가야 하는 Java 전용 절차입니다.

도구 세트

다음 도구를 사용하여 Redis에서 SSL을 활성화하기 위한 티켓을 닫을 수 있습니다.

  • Redis Enterprise Cloud 계정
  • OpenSSL
  • 자바 SE JDK
  • 제다이

또한 우리가 제공하는 작은 스크립트를 실행할 수 있도록 Bash 셸이 설치되어 있어야 합니다. 운영 체제에 Bash가 표준 설치의 일부로 포함되어 있지 않은 경우 Bash를 설치하거나 스크립트를 원하는 셸로 변환해야 합니다.

SSL을 사용하려면 Redis Enterprise Cloud 구독에 SSL 기능이 활성화되어 있어야 합니다. 계정에서 SSL이 아직 활성화되지 않은 경우 활성화하려면 Redis 지원 팀에 문의해야 합니다. 계정 대시보드의 기본 메뉴에서 지원팀에 연락할 수 있는 링크를 찾을 수 있습니다. SSL 설정에 대한 문서는 Redis Enterprise Cloud 운영 및 관리 가이드에서 찾을 수 있습니다.

SSL 대 TLS

참고로 Python 게시물에서와 같이 "SSL" 또는 "TLS" 보안 연결을 참조하기 위해 "SSL"이라는 약어를 사용하는 비공식 규칙을 따를 것입니다. Redis Enterprise Cloud는 현재(2018년 6월) TLS 프로토콜 버전 1.2를 사용하여 연결을 보호하지만 Redis Enterprise Cloud와 Jedis는 모두 "SSL"을 사용하므로 이를 따를 것입니다.

1단계 및 2단계

처음 두 단계는 Python 클라이언트용 SSL을 설정하는 데 사용되는 단계와 동일합니다. 여기에서 모두 반복하는 대신 Python 게시물을 다시 참조하도록 하겠습니다. 해당 게시물에는 모든 언어로 SSL을 사용하는 데 유용한 정보가 많이 있습니다. 계속하기 전에 3단계까지의 내용을 모두 읽으시기 바랍니다.

프로세스는 2단계 이후에 Java에 대해 분기되기 시작하므로 Redis Enterprise Cloud에서 다운로드한 자격 증명 파일을 JavaSE와 잘 작동하는 형식으로 변환하기 위해 여기에 2.5단계를 삽입하겠습니다.

2.5단계:자격 증명 변환

JavaSE의 표준 부분으로서 Oracle은 JCA(Java Cryptography Architecture)를 비롯한 다양한 보안 서비스를 제공합니다. JCA는 플러그인 제공자가 구현하는 보안 서비스를 호출하는 Java 애플리케이션용 API 세트를 정의합니다. 응용 프로그램은 사용 가능한 공급자(종종 표준 API 이외의 추가 서비스를 제공하는 공급자)를 무료로 사용할 수 있지만 대부분의 응용 프로그램은 JDK와 함께 제공되는 기본 공급자를 사용합니다.

기본 공급자를 사용할 때의 문제는 인증서 및 키를 저장하기 위해 Linux SSL 라이브러리와 함께 일반적으로 사용되는 PEM 형식을 지원하지 않는다는 것입니다. JCA에서 자격 증명 자료는 암호로 보호된 키 저장소 저장소에 저장됩니다. Java 애플리케이션에서는 두 개의 저장소를 사용하는 것이 일반적입니다. 하나는 문서에서 키 저장소라고 하고 다른 하나는 신뢰 저장소라고 합니다. 키 저장소는 클라이언트 소프트웨어에 대한 인증서 및 개인 키를 저장하는 데 사용되며 신뢰 저장소는 인증 기관의 신뢰할 수 있는 인증서를 저장하는 데 사용됩니다. PEM 형식은 Redis Enterprise Cloud에서 사용되므로 OpenSSL과 Java Keytool을 사용하여 PEM 파일을 Java 클라이언트 프로그램에 사용할 수 있는 신뢰 저장소 및 키 저장소로 변환하는 데 필요한 모든 명령을 실행하는 스크립트를 만들었습니다.

다음 스크립트인 transmogrify.sh는 redis_credentials.zip의 압축을 푼 디렉토리에서 실행해야 합니다. 스크립트는 Redis 인증 기관 인증서(redis_ca.pem)를 사용하여 신뢰 저장소(redis_truststore.p12)를 생성하고 클라이언트 인증서(redis_user.crt) 및 해당 개인 키(redis_user_private.key)를 사용하여 키 저장소(redisclient_keystore.p12)를 생성합니다. . 클라이언트 키 저장소가 암호로 보호되어 있는 동안에도 키 저장소의 보안을 보장하기 위한 조치를 취해야 합니다. 키 저장소와 신뢰 저장소는 모두 특정 Redis 데이터베이스 인스턴스에 연결하는 모든 클라이언트에 배포되어야 하므로 이 파일을 자격 증명 관리 시스템에 통합해야 합니다.

JDK9 이전의 Java 버전은 독점적인 JKS(Java KeyStore) 형식을 선호했지만 JDK9부터 Java는 기본적으로 산업 표준 PKCS12 형식을 사용합니다. 이 스크립트는 PKCS12 형식 저장소를 생성하지만 스크립트를 수정할 수 있는 경우 저장소 유형 옵션과 파일 확장자를 변경하여 JKS 형식을 사용하십시오.

3단계:클라이언트 코드에서 SSL 구성

Java 클라이언트에서 SSL을 활성화하는 마지막 단계는 클라이언트 코드를 수정하여 SSL 연결을 설정하는 것입니다. 샘플 코드는 Redis Enterprise Cloud 인스턴스에 대한 보안 연결을 설정한 다음 Redis PING 명령을 보냅니다. 수정된 코드는 다음과 같습니다.

코드의 어디에도 2.5단계에서 Java 프로그램을 위해 생성한 키 저장소 또는 신뢰 저장소를 참조하지 않습니다. JCA 제공자의 기본 동작은 서버를 인증합니다. 키와 인증서 정보만 제공하면 됩니다. 이것은 JCA 제공자가 읽은 시스템 속성으로 수행할 수 있습니다. IDE 애플리케이션 구성 또는 Java 명령줄에 다음 매개변수를 추가합니다.

시스템에서 적절한 위치와 비밀번호를 사용하도록 수정합니다.

키 저장소 속성:

  • javax.net.ssl.keyStoreType=PKCS12
  • javax.net.ssl.keyStore=/Users/tague/dev/ssl-testj/redisclient_keyStore.p12
  • javax.net.ssl.keyStorePassword=redis

transmogrify 스크립트에 의해 생성된 키 저장소의 유형(일명 형식), 위치 및 비밀번호를 지정합니다. 마찬가지로 trustStore 속성:

  • javax.net.ssl.trustStoreType=PKCS12
  • javax.net.ssl.trustStore=/Users/tague/dev/ssl-testj/redis_truststore.p12
  • javax.net.ssl.trustStorePassword=redis

trustStore의 유형, 위치 및 비밀번호를 지정하십시오. 마지막 속성인 javax.net.debug=ssl:handshake는 디버깅 정보를 활성화하는 데 사용되는 선택적 속성입니다.

SSL을 사용하도록 Jedis를 구성하는 것은 특별히 어렵지는 않지만 PEM 자격 증명을 Java 키 및 신뢰 저장소로 변환하는 데 필요한 단계에 익숙하지 않은 경우 처음에는 꺼릴 수 있습니다.

이 게시물이 우리가 Python 개발자에게 제공한 Redis Enterprise Cloud에 대한 보안 연결 설정에 대한 동일한 부드러운 소개를 Java 팬에게 제공했기를 바랍니다. 보안에 대한 마지막 알림을 하나 남겨두고 싶습니다. 대부분의 조직에는 암호와 개인 키를 관리하기 위한 특정 정책과 절차가 있습니다. 운영 및 보안 팀에 확인하여 지침을 따르고 있는지 확인하십시오.