OkHttp(5)의 HTTPS
OKHttp의 연결
OkHttp(3) 사용 방법
OkHttp(4) 차단기
OkHttp(5)의 HTTPS
Retrofit 사용 설명 (1)
Retrofit 사용 설명(2)
Retrofit 사용 설명(3)
Retrofit 사용 설명(4)
Retrofit 사용 설명(5)
Retrofit 사용 설명(6)
이 영화는 번역이 매우 좋지 않다. 왜냐하면 나는 https 프로토콜을 이해하지 못하기 때문이다. 나는 서버를 하는 것도 아니고 앞부분도 아니다.
OkHttp는 두 경쟁의 초점을 맞추려고 시도합니다.
HTTPS 서버에 연결할 때 OkHttp는 어떤 TLS 버전과 암호 세트를 제공하는지 알아야 합니다.연결성을 최대한 높이고 싶은 클라이언트는 유행이 지난 TLS 버전과 약한 디자인 암호 세트를 제공할 것이라고 말했다.보안을 극대화해야 하는 엄격한 클라이언트는 최신 TLS 버전과 가장 강력한 암호 세트에만 국한됩니다.
기본적으로 OkHttp에서 MODERN_ 을 시도합니다.TLS 연결, 현재 구성에 실패하면 COMPATIBLE_로 돌아가기TLS 연결.
각 사양의 TLS 버전 및 암호 키트는 각 버전에 따라 달라질 수 있습니다.예를 들어 OkHttp 2.2에서 우리는 POODLE 공격에 대응하기 위해 SSL 3.0에 대한 지원을 포기했다.OkHttp 2.3에서 우리는 RC4에 대한 지원을 포기했다.데스크톱 웹 브라우저와 최신 OkHttp를 유지하는 것이 보안을 유지하는 가장 좋은 방법입니다.
사용자 정의 TLS 버전 및 암호 세트를 사용하여 자신의 연결 사양을 구축할 수 있습니다.예를 들어 이 설정은 세 가지 중시되는 암호 세트에 한정된다.Android 5.0+와 유사한 현재 네트워크 서버가 필요하다는 단점이 있습니다.
ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_2)
.cipherSuites(
CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256)
.build();
OkHttpClient client = new OkHttpClient.Builder()
.connectionSpecs(Collections.singletonList(spec))
.build();
인증서 잠금
기본적으로 OkHttp는 호스트 플랫폼의 인증서 발급 기관만 신뢰합니다.이 정책은 연결성을 최대한 높였지만 인증서 발급 기관의 공격, 예를 들어 2011 DigiNotar 공격을 받았다.공격은 또한 HTTPS 서버의 인증서가 인증서 발급 기관에서 서명한 것으로 가정합니다.
CertificatePinner를 사용하여 신뢰할 수 있는 인증서와 인증서를 제한합니다.인증서 잠금은 보안을 향상시키지만 서버 팀이 TLS 인증서를 업데이트하는 능력을 제한합니다.서버의 TLS 관리자의 축복이 없으면 인증서 잠금을 사용하지 마십시오!
public CertificatePinning() {
client = new OkHttpClient.Builder()
.certificatePinner(new CertificatePinner.Builder()
.add("publicobject.com", "sha256/afwiKY3RxoMmLkuRW1l7QsPZTJPwDS2pdDROQjXw8ig=")
.build())
.build();
}
public void run() throws Exception {
Request request = new Request.Builder()
.url("https://publicobject.com/robots.txt")
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
for (Certificate certificate : response.handshake().peerCertificates()) {
System.out.println(CertificatePinner.pin(certificate));
}
}
사용자 정의 신뢰 인증서
전체 코드 예시는 호스트 플랫폼의 인증서 발급 기구를 자신의 집합으로 바꾸는 방법을 보여 줍니다.위에서 말한 바와 같이 서버의 TLS 관리자의 축복이 없으면 사용자 정의 인증서를 사용하지 마십시오!
private final OkHttpClient client;
public CustomTrust() {
SSLContext sslContext = sslContextForTrustedCertificates(trustedCertificatesInputStream());
client = new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory())
.build();
}
public void run() throws Exception {
Request request = new Request.Builder()
.url("https://publicobject.com/helloworld.txt")
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
}
private InputStream trustedCertificatesInputStream() {
... // Full source omitted. See sample.
}
public SSLContext sslContextForTrustedCertificates(InputStream in) {
... // Full source omitted. See sample.
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.