openssl研究

GitHub - fries/android-external-openssl: Extensions to openssl shipped with android to suit open needs.

GitHub - CyanogenMod/android_external_openssl: OpenSSL for Android

GitHub - robertying/openssl-curl-android: Compile openssl and curl for Android

一。OpenSSL 是一个开源的密码学库,它提供了丰富的密码学功能和安全协议的实现。在 OpenSSL 的源码中,crypto 和 ssl 是两个主要的模块,分别用于密码学功能和 SSL/TLS 协议的实现。

crypto 模块:

提供了丰富的密码学功能,包括对称加密算法(如 AES、DES)、哈希算法(如 MD5、SHA)、公钥加密算法(如 RSA、ECDSA)等。
实现了各种密码学协议,例如 SSL/TLS、S/MIME、PKCS 等。
提供了密码学相关的数据结构和函数,例如大数运算、随机数生成、证书操作等。
支持密码学算法的加密、解密、签名、验证、密钥生成等操作。
ssl 模块:

实现了 SSL/TLS 协议,提供了安全的通信通道,确保数据在传输过程中的保密性、完整性和认证性。
实现了 SSL/TLS 握手协议,用于建立安全连接、协商加密算法和密钥。
实现了 SSL/TLS 记录协议,用于将应用层数据分割成记录并按照协议要求进行加密和传输。
提供了 SSL/TLS 相关的数据结构和函数,例如 SSL 上下文、SSL 连接、握手阶段的函数等。
支持 SSL/TLS 的客户端和服务器的编程接口,方便应用程序进行 SSL/TLS 通信。
需要注意的是,crypto 模块提供了密码学相关的功能,而 ssl 模块则建立在 crypto 模块之上,使用密码学库来实现 SSL/TLS 协议。通过 OpenSSL 的 crypto 和 ssl 模块,开发者可以在自己的应用程序中实现各种密码学功能和安全的通信机制。

二。OpenSSL 的 crypto 模块提供了很多主要接口,用于执行各种密码学相关的操作。以下是一些主要的 crypto 接口:

Hash 函数接口:

EVP_MD_CTX_new() 和 EVP_MD_CTX_free():创建和释放哈希函数上下文。
EVP_DigestInit()、EVP_DigestUpdate() 和 EVP_DigestFinal():初始化、更新和完成哈希计算。
EVP_MD_size():获取哈希摘要的输出字节长度。
对称加密接口:

EVP_CIPHER_CTX_new() 和 EVP_CIPHER_CTX_free():创建和释放对称加密算法上下文。
EVP_CipherInit()、EVP_CipherUpdate() 和 EVP_CipherFinal():初始化、更新和完成对称加密算法的加密或解密操作。
EVP_CIPHER_key_length() 和 EVP_CIPHER_iv_length():获取对称加密算法的密钥长度和初始化向量长度。
随机数生成接口:

RAND_bytes():生成随机数字节序列。
RAND_pseudo_bytes():生成伪随机数字节序列。
公钥加密接口:

EVP_PKEY_new() 和 EVP_PKEY_free():创建和释放公钥(或私钥)对象。
EVP_PKEY_encrypt() 和 EVP_PKEY_decrypt():使用公钥(或私钥)加密或解密数据。
数字签名接口:

EVP_SignInit()、EVP_SignUpdate() 和 EVP_SignFinal():初始化、更新和完成数字签名操作。
EVP_VerifyInit()、EVP_VerifyUpdate() 和 EVP_VerifyFinal():初始化、更新和完成数字签名验证操作。
密钥对和证书操作:

RSA_generate_key():生成 RSA 密钥对。
EVP_PKEY_assign_RSA():将 RSA 密钥对赋值给 EVP_PKEY 对象。
EVP_PKEY_get1_RSA():从 EVP_PKEY 对象中获取 RSA 密钥对。
PEM_write_X509():将 X.509 格式的证书写入文件。
这些仅是 crypto 模块提供的一小部分接口示例,实际上还有很多其他函数和数据结构可以用于执行不同类型的密码学操作。开发者可以通过 OpenSSL 的官方文档和头文件来了解更多详细的接口信息。

三。

SSL 模块是 OpenSSL 中用于实现 SSL/TLS 协议的部分,它提供了一系列接口来支持 SSL/TLS 安全通信。以下是一些 SSL 模块对外提供的主要接口:

  1. 上下文(Context)操作接口:

    • SSL_CTX_new() 和 SSL_CTX_free():创建和释放 SSL 上下文对象。
    • SSL_CTX_set_options() 和 SSL_CTX_clear_options():设置和清除 SSL 上下文的选项。
    • SSL_CTX_use_certificate_file() 和 SSL_CTX_use_PrivateKey_file():设置 SSL 上下文的证书和私钥。
    • SSL_CTX_load_verify_locations():设置 SSL 上下文的 CA 证书位置。
  2. 连接(Connection)操作接口:

    • SSL_new() 和 SSL_free():创建和释放 SSL 连接对象。
    • SSL_set_fd() 和 SSL_get_fd():关联和获取 SSL 连接的套接字文件描述符。
    • SSL_connect() 和 SSL_accept():在客户端和服务器端建立 SSL 连接。
    • SSL_read() 和 SSL_write():读取和写入 SSL 加密通道上的数据。
    • SSL_shutdown():优雅地关闭 SSL 连接。
  3. 握手(Handshake)操作接口:

    • SSL_set_connect_state() 和 SSL_set_accept_state():设置 SSL 连接的握手状态。
    • SSL_do_handshake():执行 SSL 连接的握手过程。
  4. 加密(Encryption)和验证(Verification)接口:

    • SSL_get_cipher() 和 SSL_get_cipher_list():获取 SSL 连接使用的加密算法和加密套件列表。
    • SSL_get_peer_certificate() 和 SSL_get_peer_cert_chain():获取对端的证书和证书链。
    • SSL_get_verify_result():获取验证对端证书的结果。

这些仅是 SSL 模块提供的一小部分接口示例,实际上还有许多其他函数和数据结构可用于配置和操作 SSL/TLS 连接。开发者可以通过 OpenSSL 的官方文档和头文件来了解更多详细的接口信息。

你可能感兴趣的:(android应用开发,openssl,ssl,网络通信,数据加密)