상황: RHEL 7 가상 머신이 있고 여기에 ActiveMQ(v5.16.0)가 설치되어 있습니다(/opt/...).
며칠 동안 내 클라이언트 중 일부는 TLS 1.0 프로토콜인 개방형 SSL 포트(61617)를 사용하여 더 이상 연결할 수 없습니다.
오류 메시지는 다음과 같습니다.
Could not accept connection from tcp://10.10.170.1:45762: Client requested protocol TLSv1 is not enabled or supported in server context (Client requested protocol TLSv1 is not enabled or supported in server context)
다음 명령을 사용하여 서버 자체에서 포트를 테스트할 때:
openssl s_client -connect localhost:61617 -tls1
openssl s_client -connect localhost:61617 -tls1_1
openssl s_client -connect localhost:61617 -tls1_2
...처음 두 명령은 SSL 인증서를 표시하지 않지만 세 번째 명령은 제대로 작동합니다.
내 질문은 다음과 같습니다
ActiveMQ 구성에서 아무 것도 변경하지 않았으므로 RHEL의 커널 수준에서 제공되는 일부 보안 패치가 있는지 궁금합니다. 서버에 이것이 있는지 어디서 확인할 수 있나요?
ActiveMQ 측에서는 SSL과 관련하여 아무것도 변경하지 않았으며 AMQ 전송 구성은 Transport.tls를 정의하지 않았습니다.
<transportConnector name="openwire+ssl" uri="ssl://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
동일한 ActiveMQ 구성이 프로덕션 서버에서 계속 실행되고 있어 OS 수준에서 뭔가가 수행된 것 같습니다.
이 질문을 어디에 게시해야 할지 모르겠습니다: unix.SE, serverFault 또는 여기가 다른 사이트에 더 많이 의존한다고 생각되면 자유롭게 마이그레이션하십시오. 저는 이 질문을 RHEL에 집중하고 있지만 다른 사람들도 다른 운영 체제에 대해 배우는 데 도움이 될 수 있습니다.
답변1
ActiveMQ는 클라이언트가 연결하는 서비스이기 때문에 ActiveMQ는 SSL/TLS 연결에 대해 활성화할 수 있는 프로토콜을 명시적으로 지정합니다. Transport.tls 파일을 변경하고 다음 콘텐츠를 추가합니다.
<transportConnector name="openwire+ssl" uri="ssl://0.0.0.0:61617?transport.enabledProtocols=TLSv1,TLSv1.1,TLSv1.2&maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
이는 또한 모든 약화된 프로토콜을 활성화합니다. TLS 1.0 및 TLS 1.1은 안전한 것으로 간주되지 않으므로 주의해서 사용해서는 안 됩니다.
답변2
최근 openjdk 업데이트(우리의 경우 1.8.282에서 1.8.292로)는 기본적으로 TLSv1.0 및 TLSv1.1을 비활성화한 것 같습니다.
이 변경 사항은 다음에 기록됩니다.다음 티켓.
티켓에서 발췌한 내용은 다음과 같습니다.
TLS 1.0 및 1.1 비활성화
해결책
java.security 구성 파일의 jdk.tls.disabledAlgorithms 보안 속성에 "TLSv1" 및 "TLSv1.1"을 추가합니다.
당신은 또한 볼 수 있습니다RedHat 릴리스 노트
장에서3.1.4. TLS 1.0 및 1.1 버전 비활성화
TLS 프로토콜의 TLS 1.0 및 1.1 버전은 더 이상 안전한 것으로 간주되지 않으며 보다 안전하고 현대적인 TLS 1.2 및 1.3 버전으로 대체되었습니다. TLS 버전 1.0 및 1.1은 이제 기본적으로 비활성화되어 있습니다. 문제가 발생하면 java.security 구성 파일의 jdk.tls.disabledAlgorithms 보안 속성에서 TLSv1 또는 TLSv1.1을 제거하여 버전을 다시 활성화할 수 있습니다(책임은 본인 부담).
이는 더 이상 사용되지 않는 프로토콜을 사용하는 클라이언트에서 ActiveMQ가 갑자기 작동을 멈춘 이유를 설명합니다. 모범 사례는 가장 약한 프로토콜을 다시 활성화하는 대신 이러한 클라이언트를 마이그레이션하는 것입니다.
"흥미로운" 점은 ActiveMQ를 다시 시작할 때까지 서비스(ActiveMQ)가 여전히 최신 JDK를 사용하므로 패치 날짜가 클라이언트에 문제가 발생하기 시작한 날짜와 다를 수 있다는 것입니다.
답변3
다음 명령을 사용하여 서버에서 특정 TLS가 비활성화되어 있는지 테스트할 수 있습니다 curl
.
curl -vI --tls-max 1.0 https://example.org/
curl -vI --tls-max 1.1 https://example.org/
TLS가 비활성화되면 다음과 같은 오류가 발생합니다.
컬: (35) LibreSSL/3.3.6: 오류: 1404B42E: SSL 루틴: ST_CONNECT: tlsv1 경고 프로토콜 버전