[난치병] 시스템 시간이 잘못되어 SSL 연결이 실패했습니다.
4738 단어 작업 노트
문제 설명
우리 안드로이드 박스의 클라이언트는 매번 첫 번째 서버에 연결할 때마다 ssl 오류가 발생하여 연결이 실패합니다. openssl이 되돌아오는 오류는 다음과 같습니다.
SSL_connect error:00000001:lib(0):func(0):reason(1)
네트워크 pcap 패키지를 캡처했는데 ssl에서 악수를 할 때 클라이언트가 서버의 인증서를 받았을 때 인증서가 무효라고 생각했지만 같은 인증서는 이따가 다시 연결되고 연결을 만들 수 있습니다.이 문제는 특정 모델의 상자에서만 발생합니다
문제 분석
인증서의 인증 과정을 분석한 결과 인증서의 유효 시간, 쌍방이 지원하는 암호화 형식 등을 판단한 결과 안드로이드 측의 시간에 문제가 있다는 것을 발견했다. 시스템은 시간을 저장하지 않고 인터넷을 켜서 교정할 때마다 교정이 지연되고 심지어 교정이 실패할 때 2014년의 초기 시간을 가지고 인증서를 검사하는 시간이 있기 때문에 인증서가'기한이 지났다'고 인정했다.
이곳의 구덩이는 상자 위에 데스크톱 앱이 얻는 시간입니다. 베이스 시스템의 시간이 아닙니다. 베이스 시스템의 시간은 셸에서date 명령을 통해 볼 수 있습니다.
또 다른 구덩이, Openssl의 오류 정보는 한 번에 get이 끝날 수 있습니다. get이 여러 번 있어야 모든 정보를 출력할 수 있습니다. 잘못된 정보를 출력하는 코드를 수정했습니다. char error_str[256];
while (rc != 0) {
ERR_error_string_n(rc, error_str, sizeof(error_str));
g_warning("%s: SSL_connect %s", c->name, error_str);
rc = ERR_get_error();
}
따라서 문제의 완전한 오류 정보는 다음과 같다.
SSL_connect error:00000001:lib(0):func(0):reason(1) SSL_connect error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
문제 해결
제3자 응용 개발자로서androidrom의 버그에 대해 어쩔 수 없이 일반 응용 프로그램은 시스템 설정 시간의 권한도 없다.물론 인증서의 유효기간을 2014년부터 회피할 수 있다는 것은 좋은 방법이 아니다.
비교적 합리적인 방법은 우리 앱을 통해 정확한 시간을 얻은 다음에 이 시간을 가지고 교정하는 것이지 오픈스슬이 시스템을 사용하여 되돌아오는 시간이 아니다.
openssl의 라이브러리를 수정하여 openssl에서 교정 시간을 설정할 수 있는 인터페이스를 제공합니다.int SSL_connect_ptime(SSL *s, time_t ptime)
{
if (ptime)
X509_VERIFY_PARAM_set_time(s->param, ptime);
return SSL_connect(s);
}
ssl을 사용한 학생은 이것SSL_connect()
을 익혀야 합니다. 오픈슬의 인터페이스를 추가하려면 util/libssl.num
파일에 함수 이름을 붙여야 합니다. 뒤에 있는 번호와 버전 번호를 주의하십시오. SSL_COMP_get_id 412 1_1_0d EXIST::FUNCTION:
SSL_COMP_get0_name 413 1_1_0d EXIST::FUNCTION:
+SSL_connect_ptime 414 1_1_0d EXIST::FUNCTION:
업데이트
사실 뒤에 openssl의api를 보면 openssl의 원본 코드를 변경할 필요가 없습니다. X509_VERIFY_PARAM_set_time(SSL_get0_param(c->ssl), ssl_time);
FIXED & END
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[난치병] 시스템 시간이 잘못되어 SSL 연결이 실패했습니다.
우리 안드로이드 박스의 클라이언트는 매번 첫 번째 서버에 연결할 때마다 ssl 오류가 발생하여 연결이 실패합니다.
SSL_connect error:00000001:lib(0):func(0):reason(1)
네트워크...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
char error_str[256];
while (rc != 0) {
ERR_error_string_n(rc, error_str, sizeof(error_str));
g_warning("%s: SSL_connect %s", c->name, error_str);
rc = ERR_get_error();
}
int SSL_connect_ptime(SSL *s, time_t ptime)
{
if (ptime)
X509_VERIFY_PARAM_set_time(s->param, ptime);
return SSL_connect(s);
}
SSL_COMP_get_id 412 1_1_0d EXIST::FUNCTION:
SSL_COMP_get0_name 413 1_1_0d EXIST::FUNCTION:
+SSL_connect_ptime 414 1_1_0d EXIST::FUNCTION:
X509_VERIFY_PARAM_set_time(SSL_get0_param(c->ssl), ssl_time);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[난치병] 시스템 시간이 잘못되어 SSL 연결이 실패했습니다.우리 안드로이드 박스의 클라이언트는 매번 첫 번째 서버에 연결할 때마다 ssl 오류가 발생하여 연결이 실패합니다. SSL_connect error:00000001:lib(0):func(0):reason(1) 네트워크...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.