国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站開發(fā) 項(xiàng)目式說課微博營銷

網(wǎng)站開發(fā) 項(xiàng)目式說課,微博營銷,畫冊設(shè)計(jì)效果圖,ps網(wǎng)站導(dǎo)航怎么做Android自制Https證書實(shí)現(xiàn)雙向認(rèn)證 1.基本概念1.1 HTTP1.2 HTTPS1.3 加密方式1.3.1 對稱加密1.3.2 非對稱加密 1.4 SSL 功能1.4.1 客戶對服務(wù)器的身份認(rèn)證1.4.2 服務(wù)器對客戶的身份認(rèn)證1.4.3 建立服務(wù)器與客戶之間安全的數(shù)據(jù)通道 1.5 CA 證書 2.證書生成2.1 生成根證書&#xf…

Android自制Https證書實(shí)現(xiàn)雙向認(rèn)證

    • 1.基本概念
      • 1.1 HTTP
      • 1.2 HTTPS
      • 1.3 加密方式
        • 1.3.1 對稱加密
        • 1.3.2 非對稱加密
      • 1.4 SSL 功能
        • 1.4.1 客戶對服務(wù)器的身份認(rèn)證
        • 1.4.2 服務(wù)器對客戶的身份認(rèn)證
        • 1.4.3 建立服務(wù)器與客戶之間安全的數(shù)據(jù)通道
      • 1.5 CA 證書
    • 2.證書生成
      • 2.1 生成根證書(CA)
      • 2.2 生成服務(wù)器證書
      • 2.3 生成客戶端證書
    • 3.集成方式
      • 3.1 使用 OkHttp 進(jìn)行 HTTPS 請求
      • 3.2 使用原生請求進(jìn)行 HTTPS 請求
    • 4. 結(jié)束

1.基本概念


1.1 HTTP

Hyper Text Transfer Protocol ,超文本傳輸協(xié)議, 是互聯(lián)網(wǎng)使用最廣泛的一種協(xié)議,所有的WWW文件必須遵循的標(biāo)準(zhǔn),Http協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的,也就是明文,因此使用Http傳輸敏感協(xié)議是不安全的。

1.2 HTTPS

Hyper Text Transfer Protocol over Secure Socket Layer,安全的超文本傳輸協(xié)議,其實(shí)就是Http外部套了一層TLS的殼,簡單來講:HTTPS 就是“安全版”的 HTTP, HTTPS = HTTP + SSL,Https 相當(dāng)于在應(yīng)用層和TCP層之間加入了一個SSL(或者TLS),SSL層對應(yīng)用層收到的數(shù)據(jù)進(jìn)行加密。

1.3 加密方式

1.3.1 對稱加密

對稱加密是指雙方持有相同的密鑰進(jìn)行通信, 加密速度快,常見的對稱加密算法有DES\3DES\AES等~

1.3.2 非對稱加密

非對稱加密,又稱為公開密鑰加密,是為了解決對陣加密中的安全問題而誕生,一個稱為公開密鑰(公鑰 Public key),另一個成為私鑰(Private key), 但是相對而言非非對稱而言要慢于對稱加密

1.公鑰是對外開放的,私鑰是自己擁有的;
2.公鑰加密的數(shù)據(jù),只能用私鑰解密;
3.私鑰加密的數(shù)據(jù),只能用公鑰解密;

TLS/SSL 中使用了RSA非對稱加密,對稱加密以及HASH算法,RSA算法基于一個十分簡單的數(shù)論事實(shí):將兩個大素數(shù)相乘十分容易,但那時想要對其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開,作為加密密鑰;

SSL 協(xié)議既用到了對稱加密也用到了非對稱加密(公鑰加密),在建立傳輸鏈路時,SSL 首先對對稱加密的密鑰使用公鑰進(jìn)行非對稱加密,鏈路建立好之后,SSL 對傳輸內(nèi)容使用對稱加密。
對稱加密 速度高,可加密內(nèi)容較大,用來加密會話過程中的消息
公鑰加密 加密速度較慢,但能提供更好的身份認(rèn)證技術(shù),用來加密對稱加密的密鑰

1.4 SSL 功能

1.4.1 客戶對服務(wù)器的身份認(rèn)證

SSL 服務(wù)器允許客戶的瀏覽器使用標(biāo)準(zhǔn)的公鑰加密技術(shù)和一些可靠的認(rèn)證中心(CA)的證書,來確認(rèn)服務(wù)器的合法性~

1.4.2 服務(wù)器對客戶的身份認(rèn)證

也可通過公鑰技術(shù)和證書進(jìn)行認(rèn)證,也可通過用戶名,password 來認(rèn)證~

1.4.3 建立服務(wù)器與客戶之間安全的數(shù)據(jù)通道

SSL 要求客戶與服務(wù)器之間的所有發(fā)送的數(shù)據(jù)都被發(fā)送端加密、接收端解密,同時還檢查數(shù)據(jù)的完整性。 SSL 協(xié)議位于 TCP/IP 協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持~

1.5 CA 證書

CA 證書是由 CA(Certification Authority)機(jī)構(gòu)發(fā)布的數(shù)字證書。其內(nèi)容包含:電子簽證機(jī)關(guān)的信息、公鑰用戶信息、公鑰、簽名和有效期。這里的公鑰服務(wù)端的公鑰,這里的簽名是指:用hash散列函數(shù)計(jì)算公開的明文信息的信息摘要,然后采用 CA 的私鑰對信息摘要進(jìn)行加密,加密完的密文就是簽名。 即:證書 = 公鑰 + 簽名 +申請者和頒發(fā)者的信息。 客戶端中因?yàn)樵诓僮飨到y(tǒng)中就預(yù)置了 CA 的公鑰,所以支持解密簽名

2.證書生成

基本概念講完之后,我們來實(shí)際操作一下證書的生成,博主這邊主要使用到了open ssl~

2.1 生成根證書(CA)

首先,生成一個自簽名的根證書作為根證書頒發(fā)機(jī)構(gòu)(CA)
并生成根證書~
使用 OpenSSL 工具來生成:

openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 365 -out ca.crt

tips:此步驟將要求提供一些信息(如國家、組織、通用名稱等)。填寫這些信息時要確保準(zhǔn)確性,但在測試環(huán)境中可以使用虛擬的信息。

2.2 生成服務(wù)器證書

生成服務(wù)器證書并簽署為受信任的證書

openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csropenssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256

2.3 生成客戶端證書

創(chuàng)建客戶端密鑰,生成證書簽名請求(CSR)并簽署客戶端證書

openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csropenssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -sha256

需要注意的是:
保護(hù)密鑰和證書: 密鑰和證書必須得到妥善保護(hù),確保只有授權(quán)的人能夠訪問
證書有效期: 在創(chuàng)建證書時,設(shè)置適當(dāng)?shù)挠行谙?#xff0c;確保證書在過期之前能夠持續(xù)有效
證書更新: 定期更新證書以確保安全性。在證書到期之前,應(yīng)當(dāng)重新生成并部署新的證書

3.集成方式

3.1 使用 OkHttp 進(jìn)行 HTTPS 請求

  1. 將客戶端證書和私鑰文件放置到 Android 項(xiàng)目中
    將客戶端的證書文件(client.crt)和私鑰文件(client.key)放置到 Android 項(xiàng)目的合適目錄中(例如 res/raw 文件夾)
  2. 集成對應(yīng)okhttp 框架:
    implementation 'com.squareup.okhttp3:okhttp:4.9.3'
  3. 在 Android 代碼中使用 OkHttp 進(jìn)行請求
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 certificateCertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");InputStream serverCertStream = getResources().openRawResource(R.raw.server);X509Certificate serverCertificate = (X509Certificate) certificateFactory.generateCertificate(serverCertStream);// Create KeyStore and TrustManagerKeyStore 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 keyKeyStore 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 keyKeyManagerFactory 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 KeyManagerSSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);// Set up OkHttpClient with SSL socket factoryOkHttpClient client = new OkHttpClient.Builder().sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustManagerFactory.getTrustManagers()[0]).build();// Make a request using OkHttpClientRequest 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;}
}

這個示例代碼假設(shè)您有服務(wù)器證書和客戶端證書(包括私鑰)的文件。需要替換以下部分:

R.raw.server: 服務(wù)器證書文件的資源 ID。確保將正確的服務(wù)器證書文件(通常為 server.crt)放置到 Android 項(xiàng)目中,并使用相應(yīng)的資源 ID 替換。
R.raw.client: 客戶端證書文件的資源 ID。確保將正確的客戶端證書和私鑰文件(通常為 client.p12 或 client.pfx)放置到 Android 項(xiàng)目中,并使用相應(yīng)的資源 ID 替換。
“client_password”: 替換為您客戶端證書的密碼

當(dāng)然,一些基礎(chǔ)的例如網(wǎng)絡(luò)權(quán)限等操作也是必備,在此不再贅述~

3.2 使用原生請求進(jìn)行 HTTPS 請求

第一步同 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 keyKeyManagerFactory 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);// 處理響應(yīng)...} catch (Exception e) {e.printStackTrace();
}

4. 結(jié)束

此代碼是一個基本示例,涉及的步驟包括加載證書、創(chuàng)建 KeyStore 和 TrustManager,并將其應(yīng)用于 OkHttpClient和原生請求的 的 SSL 配置中,當(dāng)然也請確保適當(dāng)處理異常,并根據(jù)實(shí)際情況進(jìn)行調(diào)整~
感謝, 如有任何問題,請隨時評論or私信聯(lián)系我~

http://m.aloenet.com.cn/news/1618.html

相關(guān)文章:

  • 個人網(wǎng)站做企業(yè)備案嗎云優(yōu)化軟件
  • 山東專業(yè)網(wǎng)站解決方案制作石家莊抖音seo
  • 工商局網(wǎng)站做年報如何設(shè)置淘寶友情鏈接
  • 裝配式建筑網(wǎng)站打廣告
  • 行唐縣做網(wǎng)站電話李勇seo的博客
  • 邯鄲網(wǎng)站建設(shè)多少錢杭州seo澤成
  • 做服裝搭配圖的網(wǎng)站網(wǎng)站建設(shè)技術(shù)
  • 南昌專業(yè)網(wǎng)站建設(shè)百度熱搜廣告設(shè)計(jì)公司
  • 網(wǎng)站縮放代碼專業(yè)網(wǎng)站優(yōu)化推廣
  • 網(wǎng)站建設(shè)手機(jī)版模板愛站網(wǎng)關(guān)鍵詞查詢網(wǎng)站
  • 網(wǎng)站如何做404頁面湖南企業(yè)seo優(yōu)化報價
  • 廣州網(wǎng)站建設(shè)哪里買四平網(wǎng)絡(luò)推廣
  • 怎么做觸屏版網(wǎng)站關(guān)鍵詞優(yōu)化是什么意思
  • 網(wǎng)站優(yōu)化 前端怎么做營銷模式100個經(jīng)典案例
  • 用asp做網(wǎng)站span友情鏈接大全
  • 音頻網(wǎng)站開發(fā)湖南營銷型網(wǎng)站建設(shè)
  • 閑魚網(wǎng)站建設(shè)費(fèi)用核心關(guān)鍵詞是什么意思
  • 海南網(wǎng)站建設(shè)推廣線上營銷渠道有哪些
  • 嘉興網(wǎng)站系統(tǒng)總部外鏈工廠
  • web 網(wǎng)站做甘特圖教育機(jī)構(gòu)排名
  • 自己做國際網(wǎng)站網(wǎng)絡(luò)營銷管理
  • 有沒有靠譜的推廣平臺手機(jī)優(yōu)化軟件哪個好用
  • 怎么用ps做網(wǎng)站圖片nba排名西部和東部
  • 做網(wǎng)站搜索如何顯示官網(wǎng)高端網(wǎng)站定制開發(fā)
  • 蘭州網(wǎng)站建設(shè) 冰雨品牌推廣的具體方法
  • 站長平臺百度百度直播
  • 新手學(xué)做網(wǎng)站pdf手競價網(wǎng)官網(wǎng)
  • 網(wǎng)頁設(shè)計(jì)專業(yè)大學(xué)排名網(wǎng)站seo最新優(yōu)化方法
  • 網(wǎng)站選擇理由描述百度seo排名原理
  • 秦皇島網(wǎng)站建設(shè)哪家好天津做優(yōu)化好的公司