Я хочу открыть соединение HTTPS в приложении Google App Engine с помощью службы URLFetch. Чтобы иметь возможность проверить SSL-сертификат сервера, с которым работает мое приложение, я использую свой собственный файл хранилища ключей. Я хочу прочитать этот файл в разминочном запросе, когда мое приложение загружается, то есть перед выполнением любых запросов HTTPS. Файл хранилища ключей является частью моего файла WAR.
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(ClassLoader.getSystemResourceAsStream("myKeystoreFile"), "password".toCharArray());
trustManagerFactory.init(keystore);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustManagers, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
Я не могу использовать этот подход, потому что, хотя HttpURLConnection находится в белом списке GAE JRE, HttpsUrlConnection не работает.
Есть ли другой способ использования настраиваемого хранилища ключей в GAE? Я не нашел никакой информации об этом в документах GAE. Похоже, что в то время как служба Google URLFetch поддерживает HTTPS, хранилище ключей невозможно настроить. Правильно ли это?
Если это невозможно, является ли подход все еще действительным вообще? Или существует ли другой подход, который все еще позволяет проверить SSL-сертификат?
UPDATE
В 2009 году разработчик App Engine Ник Джонсон из Google сказал https://groups.google.com/d/topic/google-appengine-python/C9RSDGeIraE/discussion:
API urlfetch не позволяет указать свой собственный клиент сертификаты, к сожалению, чего вы хотите достичь, не в настоящее время возможно.
Правильно ли это? Если каждый HTTP-запрос в App Engine зависит от URLFetch, это означает, что пользовательские сертификаты просто не могут использоваться вообще в GAE.