【胖虎的逆向之路】Android自制Https证书实现双向认证

2.2 生成服务器证书

生成服务器证书并签署为受信任的证书

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

2.3 生成客户端证书

创建客户端密钥,生成证书签名请求(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

需要注意的是:
保护密钥和证书: 密钥和证书必须得到妥善保护,确保只有授权的人能够访问
证书有效期: 在创建证书时,设置适当的有效期限,确保证书在过期之前能够持续有效
证书更新: 定期更新证书以确保安全性。在证书到期之前,应当重新生成并部署新的证书

3.集成方式

3.1 使用 OkHttp 进行 HTTPS 请求
  1. 将客户端证书和私钥文件放置到 Android 项目中
    将客户端的证书文件(client.crt)和私钥文件(client.key)放置到 Android 项目的合适目录中(例如 res/raw 文件夹)
  2. 集成对应okhttp 框架:
    implementation 'com.squareup.okhttp3:okhttp:4.9.3'
  3. 在 Android 代码中使用 OkHttp 进行请求

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: 服务器证书文件的资源 ID。确保将正确的服务器证书文件(通常为 server.crt)放置到 Android 项目中,并使用相应的资源 ID 替换。
R.raw.client: 客户端证书文件的资源 ID。确保将正确的客户端证书和私钥文件(通常为 client.p12 或 client.pfx)放置到 Android 项目中,并使用相应的资源 ID 替换。
“client_password”: 替换为您客户端证书的密码

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

bfab1fd4edc800d7db3eabb956e.png)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-AL2SgBC3-1712597584100)]

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Python实现邮件发送的示例代码: ```python import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage # 设置发送方、接收方、邮件主题和内容 sender = 'youremail@example.com' receiver = 'recipient@example.com' subject = 'Email Subject' text = 'Email Content' # 创建一个带附件的邮件实例 message = MIMEMultipart() message['From'] = sender message['To'] = receiver message['Subject'] = subject # 添加文本内容 text_content = MIMEText(text) message.attach(text_content) # 添加图片附件 with open('image.jpg', 'rb') as f: image_data = f.read() image = MIMEImage(image_data) image.add_header('Content-ID', '<image1>') message.attach(image) # 发送邮件 try: smtpObj = smtplib.SMTP('smtp.example.com', 25) smtpObj.login('username', 'password') smtpObj.sendmail(sender, receiver, message.as_string()) print('Email sent successfully') except smtplib.SMTPException: print('Error: Unable to send email') ``` 在上面的示例代码中,我们使用了Python内置的`smtplib`模块和邮件相关的`MIME`模块来实现邮件发送。首先,我们设置了发送方、接收方、邮件主题和内容。然后,我们创建了一个带附件的邮件实例,并添加了文本内容和图片附件。最后,我们使用SMTP协议发送了邮件。在实际使用中,我们需要根据具体的邮件服务器和账户信息来设置`SMTP`服务器和登录信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值