Tag: openssl

OpenSSL和Apple Keychain集成

我们正在使用一个应该在Windows和Mac上运行的多平台应用程序。 我们的应用程序基于OpenSSL作为SSL和相关的供应商。 它使用客户端证书建立安全连接并识别最终用户。 我们希望使用Windows和Mac本机证书存储来确保最大的安全性。 Openssl有一个与Windows证书存储(CAPI引擎)交互的引擎。 但是,我们没有设法为Mac的Keychain找到这样的解决方案。 OpenSSL和Apple的Keychain之间是否有集成? 如果没有,你的建议是什么?

如何计算X.509证书的SHA-1指纹?

我正在尝试从头开始实现X.509证书生成器(我知道现有的,但我还需要另一个)。 我无法理解的是如何计算证书的SHA-1(或任何其他)指纹。 RFC5280表示签名函数的输入是DER编码的tbsCertificate字段。 不幸的是,我计算的哈希值与OpenSSL产生的哈希值不同。 这是一个循序渐进的例子。 使用OpenSSL的x509工具生成证书(以二进制DERforms, 而不是 ASCII PEM) 使用openssl x509 -fingerprint计算其SHA-1哈希值 使用dd(或其他任何东西)提取TBS字段并将其存储在单独的文件中; 使用sha1sum实用程序计算其哈希值 现在,我在第2步和第3步得到的哈希值是不同的。 有人可以给我一个提示我可能做错了吗?

使用EVP接口的AES-GCM的OpenSSL C示例

对于AES-GCM加密/解密,我试过这个,但它有一个问题。 ctx = EVP_CIPHER_CTX_new(); //Get the cipher. cipher = EVP_aes_128_gcm (); #define GCM_IV “000000000000” #define GCM_ADD “0000” #define TAG_SIZE 16 #define ENC_SIZE 64 //Encrypt the data first. //Set the cipher and context only. retv = EVP_EncryptInit (ctx, cipher, NULL, NULL); //Set the nonce and tag sizes. //Set IV length. [Optional for GCM]. retv = EVP_CIPHER_CTX_ctrl […]

使用libssl编程的任何好例子?

我想知道是否有人知道使用libssl作为编程库的任何好例子。 它只是通过libssl的代码挖掘试图理解它而烦人。 在最糟糕的情况下,我会继续@尝试和错误。

如何在OpenSSL的EVP_PKEY结构中访问原始ECDH公钥,私钥和参数?

我正在使用OpenSSL的c库生成椭圆曲线Diffie-Hellman(ECDH)密钥对,遵循此处的第一个代码示例。 它掩盖了这一行的实际公钥交换: peerkey = get_peerkey(pkey); pkey变量和返回值都是EVP *类型。 pkey包含先前生成的公钥,私钥和params,返回值仅包含对等方的公钥。 所以这提出了三个问题: get_peerkey()实际上如何从get_peerkey()提取公钥,以便发送给对等方? 代码如何从pKey提取私钥和params来存储它们以便在密钥交换后供以后使用? get_peerkey()如何从对等方的原始公钥生成新的EVP_PKEY结构? 我见过OpenSSL函数EVP_PKEY_print_public() , EVP_PKEY_print_private()和EVP_PKEY_print_params()但它们用于生成人类可读的输出。 我还没有发现将人类可读的公钥转换回EVP_PKEY结构的任何等价物。

如何在C中validationX509证书

我有X509格式的证书。 这是函数中的输入参数。 我想做的是validation证书的有效性。 怎么做到呢? X509_verify_cert(); 我找到了这个function,但这不接受X509 *证书,它接受X509_store而我只有一个X509。 最诚挚的问候。

C版OpenSSL EVP_BytesToKey方法

我正在寻找OpenSSL EVP_BytesToKey函数的C实现。 这是EVP_BytesToKey方法的伪代码解释(在OpenSSL源的/doc/ssleay.txt中): /* M[] is an array of message digests * MD() is the message digest function */ M[0]=MD(data . salt); for (i=1; i<count; i++) M[0]=MD(M[0]); i=1 while (data still needed for key and iv) { M[i]=MD(M[i-1] . data . salt); for (i=1; i<count; i++) M[i]=MD(M[i]); i++; } If the salt is NULL, it […]

OpenSSL 1.1.0中的EVP_get_cipherbyname和“undefined struct / union evp_cipher_st”

我正在尝试将openssl与visual studio c项目一起使用。 我使用visual studio nmake命令编译openssl,然后使用以下命令将所有内容安装到预定义文件夹(C:\ openssl): nmake install 文件夹结构如下: bin include/openssl lib 在include / openssl里面有.h头文件。 在我的Visual Studio 2012中,我创建了一个空的通用c ++项目,并包含C:\ openssl \ include [Project properties -> C/C++ -> General -> Additional Include Directories] 我还添加了lib目录和.lib文件。 但是当我编译代码时,我得到了 left of ‘key_len’ specifies undefined struct/union ‘evp_cipher_st’ 在我的代码中,我有这些行 const EVP_CIPHER *cipher = EVP_get_cipherbyname(“aes-256-cbc”); //some other code return cipher->key_len; 查看ossl_typ.h文件以获取evp_cipher_st定义,它被声明为 typedef […]

如何将openssl库与arm-cross编译器链接起来

我有应用程序test.c通过在主机(在ubuntu)机器上使用gcc我已成功编译并成功运行主机上的应用程序。 现在我想用LPC1788 arm-cross编译器交叉编译相同的应用程序。 请指导我如何链接openssl库文件 我的Mkakefile与GCC CC = gcc CFLAGS = -D__XMLSEC_FUNCTION__=__FUNCTION__ -DXMLSEC_NO_XKMS=1 -DXMLSEC_NO_CRYPTO_DYNAMIC_LOADING=1 -I/usr/include/xmlsec1 -I/usr/include/libxml2 -DXMLSEC_OPENSSL_097=1 -DXMLSEC_CRYPTO_OPENSSL=1 -DXMLSEC_CRYPTO=\”openssl\ -DUNIX_SOCKETS -D XML_SECURITY LDFLAGS = -lcrypto -I/usr/include/libxml2 -lxml2 -I/usr/include/xmlsec1 -lxmlsec1 all: $(CC) src/test.c -o test $(CFLAGS) $(LDFLAGS) 通过更改编译器,我使用了以下Makefile CC = /home/amarayya/doc/tools/arm-2010q1/bin/arm-uclinuxeabi-gcc CFLAGS = -D__XMLSEC_FUNCTION__=__FUNCTION__ -DXMLSEC_NO_XKMS=1 -DXMLSEC_NO_CRYPTO_DYNAMIC_LOADING=1 -I/usr/include/xmlsec1 -I/usr/include/libxml2 -DXMLSEC_OPENSSL_097=1 -DXMLSEC_CRYPTO_OPENSSL=1 -DXMLSEC_CRYPTO=\”openssl\ -DUNIX_SOCKETS -D XML_SECURITY LDFLAGS = -lcrypto […]

加密数据为字符串

我是加密和C语言的新手,所以这可能是一个明显的问题,但我找不到解决问题的方法。 我在C上创建一个应用程序,并在Linux中使用openssl进行加密。 我从这个url得到了一个C代码示例,它允许使用SHA加密和解密字符串: http : //wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption #include #include #include #include int main(int arc, char *argv[]) { unsigned char *key = “01234567890123456789012345678901”; unsigned char *iv = “01234567890123456”; /* Message to be encrypted */ unsigned char *plaintext = “The quick brown fox jumps over the lazy dog”; unsigned char ciphertext[128]; unsigned char decryptedtext[128]; int decryptedtext_len, ciphertext_len; ERR_load_crypto_strings(); […]