首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

openSSL使用Android的NDK问题

名词解释

  1. OpenSSL:Open Secure System Limited(现在称为 Open Software Foundation)开发的通用加密库,提供了许多加密和认证协议。
  2. Android NDK:Android Native Development Kit(NDK)是一个用于构建原生Android应用程序的C和C ++工具集。

问题

在使用Android NDK时,如何连接到OpenSSL?

解决方案

要在Android NDK中使用OpenSSL,请遵循以下步骤:

  1. 下载并构建OpenSSL库: 从OpenSSL官网下载合适的版本,并按照说明进行构建。在构建过程中,将--with-ssl选项指定为编译选项。
  2. 将OpenSSL库(例如,libssl.alibcrypto.a)链接到你的Android项目:
    • 在你的项目中的build.gradle文件中,添加以下代码:android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "" } } } buildTypes { ... } externalNativeBuild { cmake { path "CMakeLists.txt" } } }
    • 在你的CMakeLists.txt文件中,将OpenSSL库添加到编译器选项中:cmake_minimum_required(VERSION 3.4.1)
代码语言:txt
复制
    add_library(
代码语言:txt
复制
            crypto STATIC
代码语言:txt
复制
            IMPORTED
代码语言:txt
复制
            GLOBAL
代码语言:txt
复制
            PATHS
代码语言:txt
复制
            /path/to/your/openssl/libraries/libcrypto.a
代码语言:txt
复制
        )
代码语言:txt
复制
    add_library(
代码语言:txt
复制
            ssl STATIC
代码语言:txt
复制
            IMPORTED
代码语言:txt
复制
            GLOBAL
代码语言:txt
复制
            PATHS
代码语言:txt
复制
            /path/to/your/openssl/libraries/libssl.a
代码语言:txt
复制
        )
代码语言:txt
复制
    set(OPENSSL_LIBRARIES crypto ssl)
代码语言:txt
复制
    target_link_libraries(
代码语言:txt
复制
            native-lib
代码语言:txt
复制
            ${OPENSSL_LIBRARIES}
代码语言:txt
复制
    )
代码语言:txt
复制
    ```
  1. 在你的原生代码中使用OpenSSL库:
    • 导入必要的头文件:#include <jni.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/asn1.h> #include <openssl/asn1t.h> #include <openssl/evp.h> #include <openssl/ec.h> #include <openssl/pem.h>
    • 定义BN_CTX,用于处理椭圆曲线加密(ECC)密钥计算:BN_CTX *ctx = BN_CTX_new();
    • 定义PEM_Writer和PEM_Reader,用于处理PEM格式数据:EVP_PKEY *pkey = EVP_PKEY_new(); PEM_Writer *writer = PEM_Writer_new(ctx); PEM_Reader *reader = PEM_Reader_new(cert_pem);
    • 加载公钥证书并读取其内容:EVP_PKEY_set1_RSA(pkey, RSA_new(), EVP_PKEY_assign_RSA(pkey, rsa)); RSA *rsa = EVP_PKEY_get0_RSA(pkey);
    • 将证书内容写入PEM文件:PEM_write_RSAPrivateKey(writer, rsa, EVP_des_ede3_cbc(), NULL, 0, NULL, NULL);
    • 将PEM文件写入文件:PEM_write_PrivateKey(writer, pkey, EVP_des_ede3_cbc(), NULL, 0, NULL, NULL);
    • 释放资源:PEM_Writer_free(writer); PEM_Reader_free(reader); EVP_PKEY_free(pkey); RSA_free(rsa);
  2. 使用openssl命令行工具进行验证:
    • 安装openssl:sudo apt-get install openssl
    • 验证签名:openssl x509 -noout -modulus -in server.crt.pem -CAfile root_ca.crt -text
    • 验证证书吊销列表:openssl crl -noout -text -in root_ca.crl

通过以上

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券