ClientCertRequest.java revision b6aa97e0a0cd13846c148716fc0c7947422cea04
1b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun/* 2b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Copyright (C) 2014 The Android Open Source Project 3b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 4b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Licensed under the Apache License, Version 2.0 (the "License"); 5b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * you may not use this file except in compliance with the License. 6b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * You may obtain a copy of the License at 7b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 8b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * http://www.apache.org/licenses/LICENSE-2.0 9b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 10b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Unless required by applicable law or agreed to in writing, software 11b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * distributed under the License is distributed on an "AS IS" BASIS, 12b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * See the License for the specific language governing permissions and 14b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * limitations under the License. 15b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 16b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 17b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunpackage android.webkit; 18b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 19b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunimport java.security.Principal; 20b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunimport java.security.PrivateKey; 21b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunimport java.security.cert.X509Certificate; 22b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 23b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun/** 24b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * ClientCertRequest: The user receives an instance of this class as 25b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * a parameter of {@link WebViewClient#onReceivedClientCertRequest}. 26b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * The request includes the parameters to choose the client certificate, 27b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * such as the host name and the port number requesting the cert, the acceptable 28b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * key types and the principals. 29b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 30b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * The user should call one of the interface methods to indicate how to deal 31b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * with the client certificate request. All methods should be called on 32b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * UI thread. 33b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 34b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * WebView caches the {@link #proceed} and {@link #cancel} responses in memory 35b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * and uses them to handle future client certificate requests for the same 36b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * host/port pair. The user can clear the cached data using 37b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * {@link WebView#clearClientCertPreferences}. 38b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 39b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * TODO(sgurun) unhide 40b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * @hide 41b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 42b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunpublic interface ClientCertRequest { 43b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 44b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Returns the acceptable types of asymmetric keys (can be null). 45b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 46b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun public String[] getKeyTypes(); 47b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 48b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 49b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Returns the acceptable certificate issuers for the certificate 50b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * matching the private key (can be null). 51b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 52b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun public Principal[] getPrincipals(); 53b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 54b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 55b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Returns the host name of the server requesting the certificate. 56b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 57b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun public String getHost(); 58b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 59b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 60b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Returns the port number of the server requesting the certificate. 61b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 62b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun public int getPort(); 63b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 64b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 65b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Proceed with the specified private key and client certificate chain. 66b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Remember the user's positive choice and use it for future requests. 67b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 68b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun public void proceed(PrivateKey privateKey, X509Certificate[] chain); 69b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 70b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 71b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Ignore the request for now. Do not remember user's choice. 72b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 73b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun public void ignore(); 74b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 75b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 76b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Cancel this request. Remember the user's choice and use it for 77b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * future requests. 78b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 79b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun public void cancel(); 80b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun} 81