2017-12-28 9 views
0

HTTP POST 요청을 통해 백엔드 서버와 통신하는 Android 앱이 있습니다. HTTPS로 업그레이드하고 싶습니다. 내가 사용하고있는 API는 HttpLib.postRequest입니다.로드 균형 조정기로 TLS 협상 실패를 디버깅하는 방법?

내 Apache 서버에 대한 직접 연결이 정상적으로 작동하는 것으로 나타났습니다. 그러나로드 밸런서를 통한 연결은 작동하지 않습니다. 내로드 밸런서는 Aliyun에서 왔습니다. 나는 두 가지 다른로드 밸런서를 시도했는데 같은 방법으로 실패합니다. 직접적인 증상은 전화에서 "unknown_err"을 얻는 것입니다.

tcpdump를 사용하여 트래픽을 캡처 할 수 있습니다. 이는 올바른 장소에 연결되어 있고 협상을 시도하고 있음을 증명합니다. 세션이 HTTPS 오류 "인증서 알 수 없음 (46)"을 보내는 클라이언트로 끝납니다.

일반적으로 잘못된 인증서 또는 구성으로 인해 발생합니다. 하지만 내 인증서가 모두 유효하다는 것을 알고 있습니다. 다른 브라우저는 정상적인 웹 페이지를로드하기 위해 동일한 서버에 잘 연결됩니다. 그리고 같은 앱의 iOS 버전도 정상적으로 작동합니다. Android 휴대 전화에서 웹 사이트를 탐색하면 앱이 연결되지 않는 경우에도 정상적으로 작동합니다. 웹 사이트는 https://zaomengshe.com이므로 인증서를 확인할 수 있습니다. 또한로드 밸런서와 함께 다른 설정을하고 Let 's Encrypt에서 인증서를 얻습니다.

나는 Aliyun의로드 밸런서와 Android가 성공적인 협상을 방해하고 있다는 몇 가지 특성이 있다고 생각합니다. 아마도 일부 알고리즘이나 키 크기 등을 지원해야 할 수도 있습니다. TLS 1.2는 API 버전 20까지 지원되지 않았으므로 최소 지원 버전을 20으로 업데이트했습니다. 도움이되지 않았습니다. 이 도메인에 대한 report by SSLLabs

답변

1

분명히 말한다 :

이 서버의 인증서 체인이 완전하지 않습니다. B.

이 문제에 대한 이유에 덮인 학년 아마 부하 분산에 구성이 엉망 : 만 리프 인증서는 TLS 핸드 쉐이크 내에서 제공됩니다 아닌 중간 인증서는 신뢰 체인을 구축하는 데 필요한. 데스크톱 브라우저는 일반적으로 깨진 구성을 해결하려고하지만 다른 응용 프로그램에서는 일반적으로 작동하지 않습니다.

이것은 응용 프로그램이 실패 할 가능성이 매우 높다는 것을 의미합니다. 그리고 중간 인증서를 구성하여로드 밸런서에서 문제를 해결해야합니다.

+0

아, 그 말이 완벽합니다. 감사합니다. SSLLabs에 대한 포인터를 가져 주셔서 감사합니다! –

관련 문제