公司动态
OpenSSL与SSL握手
上一篇解决fatal: unable to access… OpenSSL SSL_read: Connection was reset, errno 10054上篇文章中提到了OpenSSL报错是fatal: unable to access https://github.com/projectXX.git: OpenSSL SSL_read: Connection was reset, errno 10054OpenSSL是什么怎么会跟Git出现在一起一个开源库。Git 工具底层依赖了 OpenSSL 库去建立 HTTPS 安全连接。验证下输入命令git config --get http.sslBackend查询git配置中的加密后端结果如下此外android系统中也引用了OpenSSL以OKhttp的网络连接为例1. [OkHttp 层] RealConnection.kt - sslSocket.startHandshake() │ ▼ 2. [Android JSSE / Conscrypt 框架层] ConscryptEngineSocket.java - NativeCrypto.SSL_do_handshake() │ (跨越 JNI 边界) ▼ 3. [Conscrypt JNI C 层] org_conscrypt_NativeCrypto.cpp ── #include openssl/ssl.h ── 执行 C 函数 ::SSL_do_handshake(ssl) │ ▼ 4. [Android 系统 C/C 动态链接库] libssl.so / libcrypto.so (BoringSSL, OpenSSL 的 Google 分支)SSL握手的大概流程客户端(Client) 服务器(Server) | | | -------- ClientHello -------------- | | | | 1.客户端问候 | | 支持哪些TLS版本 | | 支持哪些加密套件 | | 随机数Client Random | | | | ------- ServerHello ----------------| | ------- Certificate ----------------| | ------- ServerKeyExchange ------- | | ------- ServerHelloDone ----------- | | | | 2.服务器响应 | | 选择加密算法 | | 发服务器证书 | | 提供密钥交换参数 | | | | -------- ClientKeyExchange -------- | | -------- ChangeCipherSpec --------- | | -------- Finished ----------------- | | | | 3.客户端确认 | | 生成Pre-Master Secret | | 开始使用加密通信 | | | | ------- ChangeCipherSpec ----------- | | ------- Finished ------------------- | | | | | | 加密HTTP数据 |