2016-04-04 2 views
0

Кто-то решил использовать Sharepoint для создания общедоступного веб-сайта. Веб-сайт является только контентом и не использует какую-либо библиотеку документов Sharepoint или функции совместной работы. Веб-сайт является открытым, не требует входа и использует SSL.Проблема с общедоступным сайтом Sharepoint на Android

Сайт выглядит хорошо при просмотре с помощью браузера компьютера, однако при просмотре на Android-Chrome он предложит установить сертификат безопасности. Сообщение это:

Нет Сертификаты найдены

В приложение Chrome запросил сертификат. Выбор сертификата позволит приложению использовать этот идентификатор с серверами сейчас и в будущем. Приложение идентифицировало запрашивающий сервер как, но вы должны предоставить доступ к сертификату приложения только в том случае, если доверяете приложению.

Я считаю, что это связано с тем, что у Android не установлен установленный по умолчанию пользовательский сертификат, а Sharepoint хочет идентифицировать пользователя. В любом случае, чтобы перенастроить Sharepoint, чтобы он не запрашивал сертификат клиента?

ответ

0

android developer website много говорит об этом. В частности, пункт, что представляется важным является

власти Неизвестного сертификата В этом случае SSLHandshakeException происходит потому, что у вас есть центр сертификации, который не доверяет системе. Это может быть потому, что у вас есть сертификат от нового центра сертификации, которому еще не доверяют Android, или ваше приложение работает на более старой версии без CA. Чаще всего ЦС неизвестен, поскольку он не является публичным ЦС, а является частным, выпущенным такой организацией, как правительство, корпорация или учебное заведение для собственного использования. К счастью, вы можете научить HttpsURLConnection доверять определенному набору ЦС. Процедура может быть немного сложной, поэтому ниже приведен пример, который берет определенный CA из InputStream, использует его для создания KeyStore, который затем используется для создания и инициализации TrustManager. TrustManager - это то, что система использует для проверки сертификатов с сервера и путем создания одного из KeyStore с одним или несколькими ЦС - это будут единственные CA, которым доверяет этот TrustManager. Учитывая новый TrustManager, в примере инициализируется новый SSLContext, который предоставляет SSLSocketFactory, который вы можете использовать для переопределения SSLSocketFactory по умолчанию из HttpsURLConnection. Таким образом, соединение будет использовать ваши центры сертификации для проверки сертификата. Вот пример в полной мере используя организационную CA из Университета штата Вашингтон:

// Load CAs from an InputStream 
// (could be from a resource or ByteArrayInputStream or ...) 
CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
// From https://www.washington.edu/itconnect/security/ca/load-der.crt 
InputStream caInput = new BufferedInputStream(new FileInputStream("load- der.crt")); 
Certificate ca; 
try { 
ca = cf.generateCertificate(caInput); 
System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN()); 
} finally { 
caInput.close(); 
} 

// Create a KeyStore containing our trusted CAs 
String keyStoreType = KeyStore.getDefaultType(); 
KeyStore keyStore = KeyStore.getInstance(keyStoreType); 
keyStore.load(null, null); 
keyStore.setCertificateEntry("ca", ca); 

// Create a TrustManager that trusts the CAs in our KeyStore 
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); 
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); 
tmf.init(keyStore); 

// Create an SSLContext that uses our TrustManager 
SSLContext context = SSLContext.getInstance("TLS"); 
context.init(null, tmf.getTrustManagers(), null); 

// Tell the URLConnection to use a SocketFactory from our SSLContext 
URL url = new URL("https://certs.cac.washington.edu/CAtest/"); 
HttpsURLConnection urlConnection = 
(HttpsURLConnection)url.openConnection(); 
urlConnection.setSSLSocketFactory(context.getSocketFactory()); 
InputStream in = urlConnection.getInputStream(); 
copyInputStreamToOutputStream(in, System.out); 

с пользовательским TrustManager, который знает о ваших УЦ, система может проверить, что ваш сертификат сервера приходят из доверенный эмитент.

Внимание: Многие веб-сайты описывают плохое альтернативное решение, которое должно установить TrustManager, что ничего не делает. Если вы это сделаете, вы также не сможете шифровать ваше сообщение, потому что любой может атаковать ваших пользователей в общедоступной точке доступа Wi-Fi, используя трюки DNS для отправки трафика ваших пользователей через собственный прокси-сервер, который претендует на роль вашего сервера. Затем злоумышленник может записывать пароли и другие персональные данные. Это работает, потому что злоумышленник может сгенерировать сертификат и - без TrustManager, который фактически проверяет, что сертификат поступает из надежного источника - ваше приложение может разговаривать с кем угодно. Поэтому не делайте этого, даже не временно. Вы всегда можете заставить свое приложение доверять эмитенту сертификата сервера, поэтому просто сделайте это.

+0

Сертификат сервера выдается Comodo, и Chrome говорит, что ему доверяют. – elty123

Смежные вопросы