aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/OkHttpClientFactory.java
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2016-04-09 18:34:00 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2016-04-09 18:34:00 +0200
commitc8e5395d4e3c3dcc349ebe6bb300016f44d430d5 (patch)
tree56da65ee4adb84e8db53384c2e23ea0fffaffde0 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/OkHttpClientFactory.java
parent2d762e55da92ef45576967c0d1befef55e7935ea (diff)
downloadopen-keychain-c8e5395d4e3c3dcc349ebe6bb300016f44d430d5.tar.gz
open-keychain-c8e5395d4e3c3dcc349ebe6bb300016f44d430d5.tar.bz2
open-keychain-c8e5395d4e3c3dcc349ebe6bb300016f44d430d5.zip
Use cert pinning only if available
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/OkHttpClientFactory.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/OkHttpClientFactory.java47
1 files changed, 23 insertions, 24 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/OkHttpClientFactory.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/OkHttpClientFactory.java
index f3606aa2f..ea2ae8368 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/OkHttpClientFactory.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/OkHttpClientFactory.java
@@ -38,7 +38,7 @@ public class OkHttpClientFactory {
return client;
}
- public static OkHttpClient getPinnedSimpleClient(CertificatePinner pinner) {
+ public static OkHttpClient getSimpleClientPinned(CertificatePinner pinner) {
return new OkHttpClient.Builder()
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.readTimeout(25000, TimeUnit.MILLISECONDS)
@@ -46,32 +46,31 @@ public class OkHttpClientFactory {
.build();
}
- public static OkHttpClient getPinnedClient(URL url, Proxy proxy) throws IOException, TlsHelper.TlsHelperException {
+ public static OkHttpClient getClientPinnedIfAvailable(URL url, Proxy proxy) throws IOException,
+ TlsHelper.TlsHelperException {
+ OkHttpClient.Builder builder = new OkHttpClient.Builder();
- return new OkHttpClient.Builder()
- // don't follow any redirects for keyservers, as discussed in the security audit
- .followRedirects(false)
- .followSslRedirects(false)
- .proxy(proxy)
- // higher timeouts for Tor
- .connectTimeout(30000, TimeUnit.MILLISECONDS)
- .readTimeout(45000, TimeUnit.MILLISECONDS)
- // use pinned cert with SocketFactory
- .sslSocketFactory(TlsHelper.getPinnedSslSocketFactory(url))
- .build();
- }
+ // don't follow any redirects for keyservers, as discussed in the security audit
+ builder.followRedirects(false)
+ .followSslRedirects(false);
+
+ if (proxy != null) {
+ // set proxy and higher timeouts for Tor
+ builder.proxy(proxy);
+ builder.connectTimeout(30000, TimeUnit.MILLISECONDS)
+ .readTimeout(45000, TimeUnit.MILLISECONDS);
+ } else {
+ builder.connectTimeout(5000, TimeUnit.MILLISECONDS)
+ .readTimeout(25000, TimeUnit.MILLISECONDS);
+ }
- public static OkHttpClient getClient(Proxy proxy) throws IOException, TlsHelper.TlsHelperException {
+ // If a pinned cert is available, use it!
+ // NOTE: this fails gracefully back to "no pinning" if no cert is available.
+ if (url != null && TlsHelper.getPinnedSslSocketFactory(url) != null) {
+ builder.sslSocketFactory(TlsHelper.getPinnedSslSocketFactory(url));
+ }
- return new OkHttpClient.Builder()
- // don't follow any redirects for keyservers, as discussed in the security audit
- .followRedirects(false)
- .followSslRedirects(false)
- .proxy(proxy)
- // higher timeouts for Tor
- .connectTimeout(30000, TimeUnit.MILLISECONDS)
- .readTimeout(45000, TimeUnit.MILLISECONDS)
- .build();
+ return builder.build();
}
}