Протокол передачи гипертекста, протокол передачи гипертекста, является наиболее распространенным протоколом в Интернете.,Все файлы WWW должны соответствовать стандартам.,Данные, передаваемые по протоколу HTTP, не шифруются.,То есть обычный текст,Поэтому HTTP небезопасен для передачи конфиденциальных протоколов.
Hyper Text Transfer Protocol over Secure Socket Layer, безопасный протокол передачи гипертекста, на самом деле является слоем оболочки TLS вне HTTP. Проще говоря: HTTPS. Это «безопасная версия» HTTP,HTTPS = HTTP + SSL, HTTPS эквивалентно добавлению SSL (или или TLS) между уровнем приложения и уровнем TCP.,Уровень SSL получает данные от уровня приложения.
Симметричное шифрование означает связь между двумя сторонами, имеющими одинаковый ключ, руководить, Скорость шифрования высокая. Распространенные алгоритмы симметричного шифрования включают DES\3DES\AES и т. д.~
Асимметричное шифрование, также известное как шифрование с открытым ключом, было создано для решения проблем безопасности при шифровании. Один из них называется открытым ключом (открытый ключ), а другой — закрытым ключом (закрытый ключ), но они относительно разные. медленнее, чем симметричное шифрование
1.открытый ключ открыт для внешнего мира, а закрытый ключ принадлежит вам;
2.шифрование с открытым ключомиз данных можно расшифровать только с помощью закрытого ключа;
3. Закрытый ключ для шифрования данных может использоваться только открытым способом. ключ Расшифровать;
TLS/SSL серединаиспользовать ПонятноRSAНет Симметричное шифрование,Симметричное шифрованиеа такжеHASHалгоритм,Алгоритм RSA основан на очень простом факте теории чисел: очень легко умножить два больших простых числа.,Но в то время факторизировать свой продукт было крайне сложно руководить,Таким образом, продукт может быть обнародован.,как ключ шифрования;
SSL Протокол использует как симметричное, так и асимметричное шифрование (шифрование с открытым ключом). При установлении канала передачи используется SSL. первый对Симметричное шифрованиеизKeyиспользоватьоткрытый ключруководить Нет Симметричное шифрование, после установления соединения, SSL О содержании передачииспользовать Симметричное шифрование。 Симметричное шифрование Высокая скорость, большой зашифрованный контент, используемый для шифрования сообщений во время сеанса. шифрование с открытым ключом шифрование происходит медленнее, но может обеспечить лучшую технологию аутентификации личности для симметричного шифрования. шифрованиеизKey
SSL сервер позволяет клиентам использовать браузер и использовать стандартное и зшифрование. с открытым ключом Технологии и некоторыми надежными Центрами Сертификации (CA) и Сертификатами, чтобы подтвердить легитимность сервериз~
Также доступно через открытый ключ Технология и Сертификатруководить аутентификацию, в том числе по имени пользователя, паролю Приходите на сертификацию~
SSL требует, чтобы все данные, передаваемые между клиентом и сервером, были зашифрованы отправляющей стороной и расшифрованы принимающей стороной, а также проверялась целостность данных. Протокол SSL расположен между протоколом TCP/IP и различными протоколами прикладного уровня, обеспечивая поддержку безопасности при передаче данных~
CA Сертификат предоставлен CA(Certification Цифровой сертификат, выданный органом власти. Его содержимое включает в себя: информацию об электронном визовом органе, информацию о пользователе открытого ключа, открытый ключ, подпись и срок действия. Открытый ключ сервера открытых ключей здесь и подпись здесь относятся к: использованию хеш-функции для расчета дайджеста информации открытого открытого текста, а затем использованию CA информационный дайджест пары секретных ключей руководит шифрованием, шифрование и полный зашифрованный текст представляют собой знак. То есть: сертификат = открытый ключ + знак +Информация о заявителе и эмитенте. В клиенте он предустановлен в операционной системе. CA изоткрытый ключ, поэтому расшифровка поддерживается знак
После объяснения основных понятий,Давайте собственно управлять генерацией Сертификатиз,Основная тема блогера — open ssl~
первый,Создать самостоятельный знак корневого сертификата в качестве корневого центра сертификации (CA) И сгенерируйте корневой сертификат~ использовать OpenSSL Инструменты для создания:
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 365 -out ca.crt
Советы: на этом этапе потребуется ввести некоторую информацию (например, страна, расположение, общие названия и т. д.). Обязательно будьте точными при заполнении этой информации.,Но существующая тестовая среда может использовать виртуальную информацию.
Создайте сертификат сервера и подпишите его как доверенный сертификат.
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256
Создать ключ клиента, сгенерировать Сертификатзнакпросить (CSR) и подписать клиент Сертификат.
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -sha256
Следует отметить следующее: Защитите ключи и сертификаты. Ключи и сертификаты должны быть надлежащим образом защищены, чтобы доступ имели только уполномоченные лица. Срок действия сертификата: при создании сертификата установите соответствующий срок действия, чтобы сертификат оставался действительным до истечения срока его действия. Обновления сертификатов: регулярно обновляйте сертификаты для обеспечения безопасности. До истечения срока действия сертификата новый сертификат должен быть повторно создан и развернут.
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
public class MyOkHttpClient {
public static Response makeRequest() {
try {
// Load server certificate
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
InputStream serverCertStream = getResources().openRawResource(R.raw.server);
X509Certificate serverCertificate = (X509Certificate) certificateFactory.generateCertificate(serverCertStream);
// Create KeyStore and TrustManager
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, null);
keyStore.setCertificateEntry("server", serverCertificate);
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
// Load client certificate and private key
KeyStore clientKeyStore = KeyStore.getInstance("PKCS12");
InputStream clientCertStream = getResources().openRawResource(R.raw.client);
clientKeyStore.load(clientCertStream, "client_password".toCharArray()); // Replace "client_password" with the password of your client key
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(clientKeyStore, "client_password".toCharArray()); // Replace "client_password" with the password of your client key
// Initialize SSLContext with TrustManager and KeyManager
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
// Set up OkHttpClient with SSL socket factory
OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustManagerFactory.getTrustManagers()[0])
.build();
// Make a request using OkHttpClient
Request request = new Request.Builder()
.url("https://your-server-url.com/api/endpoint")
.build();
return client.newCall(request).execute();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
В этом примере кода предполагается, что у вас есть файлы сертификата сервера и сертификата клиента (включая закрытый ключ). Необходимо заменить следующие детали:
R.raw.server: Ресурсы для файлов сертификатов сервера ИДЕНТИФИКАТОР. Обязательно добавьте правильный файл сертификата сервера (обычно server.crt), помещенный в Android В проект и использовать соответствующие ресурсы ID заменять. R.raw.client: Ресурсы для файлов сертификатов клиентов ИДЕНТИФИКАТОР. Убедитесь, что у вас есть правильный сертификат клиента и файл закрытого ключа (обычно client.p12 или client.pfx) помещается в Android В проект и использовать соответствующие ресурсы ID заменять. “client_password”: Замените паролем для вашего клиентского сертификата.
Конечно, также необходимы некоторые базовые операции, такие как сетевые разрешения, поэтому я не буду вдаваться в подробности~
Первый шаг такой же, как и в 3.1, поэтому я не буду здесь вдаваться в подробности~ Ниже приведен код интеграции.
try {
KeyStore keyStore = KeyStore.getInstance("PKCS12");
InputStream clientCertStream = getResources().openRawResource(R.raw.client);
keyStore.load(clientCertStream, "password".toCharArray()); // Replace "password" with the password of your client key
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, "password".toCharArray());
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagerFactory.getKeyManagers(), null, null);
HttpClient httpClient = new DefaultHttpClient();
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("https", new SSLSocketFactory(sslContext), 443));
ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(httpClient.getParams(), schemeRegistry);
httpClient = new DefaultHttpClient(cm, httpClient.getParams());
HttpGet httpGet = new HttpGet("https://your-server-url.com/api/endpoint");
HttpResponse response = httpClient.execute(httpGet);
// Обработать ответ...
} catch (Exception e) {
e.printStackTrace();
}
Этот код является базовым примером и включает в себя этапы загрузки сертификата, создания KeyStore и TrustManager и примените его к OkHttpClientи Роднойпроситьиз из SSL Разумеется, во время настройки убедитесь, что исключения обрабатываются соответствующим образом и корректируются в соответствии с реальной ситуацией. благодарный, Если у вас есть какие-либо вопросы, пожалуйста, оставляйте комментарии или свяжитесь со мной через личное сообщение~