我正在编写一个bash脚本,它将使用openssl生成一个证书签名请求,其中包含符合X509v3扩展名的主题替代名称.
由于没有针对此的命令行选项,因此解决方案是将该-config选项与该-reqexts选项结合使用,方法是将SAN值内联附加到默认配置文件中.
openssl req -new -sha256 -key domain.key -subj "/C=US/ST=CA/O=Acme, Inc./CN=example.com" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:example.com,DNS:www.example.com")) -out domain.csr
Run Code Online (Sandbox Code Playgroud)
我的问题是可移植性.虽然类似的问题向我保证这可以在我的Ubuntu环境中工作,因为默认的配置文件很/etc/ssl/openssl.cnf遗憾,这在任何地方都无法使用,Windows就是一个明显的例子.
如何以编程方式确定openssl 默认配置文件的完整路径?
文档中有一个明显的暗示
-config filename
这允许指定备用配置文件,这将覆盖编译时文件名或OPENSSL_CONF环境变量中指定的任何文件名.
我已经阅读了配置文档并搜索了源代码,但是我无法找到它从何处加载"编译时"默认配置文件的机制.如果我能找到它,那么我宁愿将其作为变量加载到脚本而不是硬编码路径中.
而且,我的$OPENSSL_CONF变量是空的.
目前我的脚本检查这些条件,并使用第一个评估为true的条件:
$OPENSSL_CONF 变量已填充,文件存在/etc/ssl/openssl.cnf 存在如果这些都不是真的,那么它包括标准配置的副本.这是不合需要的,因为它实际上会覆盖客户端建立的自定义设置.我想完全使用环境条件,只需添加SAN部分作为附录.
我可以用通常的嫌疑人的路径甚至系统搜索进一步扩展这个链.但是如果存在多个,那么我无法保证openssl实际上将其用作默认值.
我有一个需要使用 Libcrypto 的项目 - 我有两个版本的 Libcrypto(为 ARM64 构建的 libcrypto.a(来自 OpenSSL 1.1.1))和(针对 Intel 的 lcrypto.a(来自 OpenSSL 1.0.2))。撇开拥有两个不同版本是否是良好实践的问题不谈,我可以说,如果我包含 libcrypto.a,那么我可以在 M1 上构建和运行,并且它在 M1 上运行良好。如果我包含 lcrypto.a,那么我可以在 Intel 上构建和运行,并且它在 Intel 上运行良好。我不能做的就是将它们都包括在内(链接器错误 - The linked library 'lcrypto.a' is missing one or more architectures required by this target: arm64.) - 如果我不能将它们都包括在内,那么我就无法构建一个胖二进制文件,并且我的应用程序并不是完全有用!
我的问题是如何将两者都包含在我的项目中 - 或者我在哪里可以获得(以及如何包含)Libcrypto 的胖版本?我看过这个https://github.com/balthisar/openssl-xcframeworks/releases和这个https://developer.apple.com/forums/thread/670631但我一无所知。我想我构建了一个 Fat Binary - 但我认为我构建的 Fat Binary 不适用于任何一种架构!
我正在尝试将应用程序移植到mac OSX.它使用openssl.我是xcode和mac开发的新手.我是否需要自己编译和安装openssl,或者是否有一些openssl-devel软件包作为操作系统的一部分或者自制软件或其他类似软件包提供?
在/usr/include/openssl/sha.h中声明的SHA256_XXX系列已在OS-X 10.7及更高版本中弃用.
int SHA256_Init(SHA256_CTX *c) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
int SHA256_Update(SHA256_CTX *c, const void *data, size_t len) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
int SHA256_Final(unsigned char *md, SHA256_CTX *c) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
unsigned char *SHA256(const unsigned char *d, size_t n,unsigned char *md) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
void SHA256_Transform(SHA256_CTX *c, const unsigned char *data) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
Run Code Online (Sandbox Code Playgroud)
虽然它目前正在运行,但我想知道后续OS X版本的替代方案是什么.
我目前正在建设用Objective-C的iOS应用和含有雨燕的OpenSSL和OpenLDAP的框架,它建立并没有任何问题运行.
但是,当我尝试将应用程序存档以供发布时,会出现以下错误:
以下是一些其他信息:
Xcode版本是7.3.1(7D1014)
该项目是一个Xcworkspace(包含一个podfile,但框架没有通过Cocoapods集成)
更新:
进一步测试后,发生了另一个makefile错误(在任何情况下类似的问题)
此图像说明了所使用的所有框架和库以及发生的错误.
这是构建日志:
我感谢任何帮助,并乐意提供任何其他信息.
我尝试在我的项目中编译openssl 1.0.2h
我使用Openssl做了这些步骤
要将库添加到我的项目预建作为静态库,我含LIB /(其中包含我支持架构的.a文件),包括/它有必要包括(你可以找到我的JNI目录下创建一个文件夹的OpenSSL在你下载的openssl版本下)和Android.mk有以下内容:
include $(CLEAR_VARS)
LOCAL_MODULE := libssl
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libssl.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libcrypto
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
然后,要在另一个jni模块中使用该库,我将以下内容添加到其Android.mk文件中:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../openssl/include
LOCAL_STATIC_LIBRARIES := libssl libcrypto
Run Code Online (Sandbox Code Playgroud)
我明白了
jni/openssl/lib/armeabi-v7a/libcrypto.a(armcap.o):armcap.c:function OPENSSL_cpuid_setup: error: undefined reference to 'sigfillset'
jni/openssl/lib/armeabi-v7a/libcrypto.a(armcap.o):armcap.c:function OPENSSL_cpuid_setup: error: undefined reference to 'sigdelset'
jni/openssl/lib/armeabi-v7a/libcrypto.a(armcap.o):armcap.c:function OPENSSL_cpuid_setup: error: undefined reference to 'sigdelset'
jni/openssl/lib/armeabi-v7a/libcrypto.a(armcap.o):armcap.c:function OPENSSL_cpuid_setup: error: undefined reference to 'sigdelset'
jni/openssl/lib/armeabi-v7a/libcrypto.a(armcap.o):armcap.c:function OPENSSL_cpuid_setup: error: undefined reference to 'sigdelset'
jni/openssl/lib/armeabi-v7a/libcrypto.a(ui_openssl.o):ui_openssl.c:function open_console: error: undefined reference to 'tcgetattr'
jni/openssl/lib/armeabi-v7a/libcrypto.a(ui_openssl.o):ui_openssl.c:function read_string_inner: …Run Code Online (Sandbox Code Playgroud) 我正在使用 bazel 为我的 Android 应用程序构建一个本机库。
我想像这样使用一些OpenSSL函数:
#include <jni.h>
#include <openssl/aes.h>
...
AES_encrypt(in, out, key);
Run Code Online (Sandbox Code Playgroud)
如何将 openssl 库添加到 bazel build ?
附属问题:我应该使用哪个存档?
openssl-1.1.0c.tar.gz
openssl-1.0.2j.tar.gz
openssl-1.0.1u.tar.gz
openssl-fips-2.0.13.tar.gz
openssl-fips-ecp-2.0.13.tar.gz
Run Code Online (Sandbox Code Playgroud)
我下载了openssl-1.0.2j存档。并cc_library在我的BUILD文件中添加了一个条目。
cc_library(
name = "openssl",
srcs = glob([
"openssl-1.0.2j/crypto/**/*.h",
"openssl-1.0.2j/crypto/**/*.c"
]),
includes = [
"openssl-1.0.2j",
"openssl-1.0.2j/crypto/",
],
visibility = ["//visibility:public"],
)
Run Code Online (Sandbox Code Playgroud)
我有这个错误:
openssl-1.0.2j/crypto/dh/p512.c:60:24: fatal error: openssl/bn.h: No such file or directory
#include <openssl/bn.h>
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么这个代码试图包括文件,从openssl而它在openssl-1.0.2j/crypto/
和 openssl-1.1.0c
openssl-1.1.0c/include/openssl/e_os2.h:13:34: fatal error: openssl/opensslconf.h: No …Run Code Online (Sandbox Code Playgroud) 我正在编写一个依赖于OpenSSL的跨平台C ++库,我将其静态链接并捆绑到我的库中以便于使用。我想为我的库提供一个#include目录,该目录显然包含一个“ openssl”子目录。
不幸的是,每个体系结构,每个平台的OpenSSL #include目录的内容是不同的。因此,例如,(最小)iOS的三个不同版本的OpenSSL头文件。添加更多有关TV-OS支持和模拟器版本的信息。Windows和Android上存在不同程度的相同问题。
仔细检查后,在所有平台和体系结构中唯一通用但不同的文件是“ opensslconf.h”,它通常仅相差几行,有时甚至只有一行。
例如,tvOS版本的“ opensslconf.h”包含:
#ifndef OPENSSL_NO_ASYNC
# define OPENSSL_NO_ASYNC
#endif
Run Code Online (Sandbox Code Playgroud)
而iOS版本没有。
RC4_INT的定义之间存在更频繁的区别:
// 64-bit architectures?
#define RC4_INT unsigned int
// 32-bit architectures?
#define RC4_INT unsigned char
Run Code Online (Sandbox Code Playgroud)
我只希望有一套适用于所有体系结构和平台的OpenSSL #include。我不想为每个架构/平台都复制所有这些文件,尤其是因为变化太多。
我的第一个问题是,是否可以根据需要设置一个OpenSSL #include目录?如果是这样,我应该选择哪个版本的“ opensslconf.h”,我怎么知道它会起作用?
我的第二个问题是,为什么这是一个问题。为什么OpenSSL无法封装这些平台差异?它是否已经在跟踪为其他体系结构构建时会发生变化的许多其他变量和类型?
我已经能够为iOS设备编译特定版本的OpenSSL,我现在正在尝试为Mac OSX编译.但是,当我运行我的bash脚本(下面提供)时,我收到以下错误:
ar r ../../libcrypto.a o_names.o obj_dat.o obj_lib.o obj_err.o obj_xref.o
ar: ../../libcrypto.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
ar: ../../libcrypto.a: Inappropriate file type or format
Run Code Online (Sandbox Code Playgroud)
当我跑步时,lipo -info libcrypto.a我得到以下结果:
Architectures in the fat file: libcrypto.a are: i386 x86_64
Run Code Online (Sandbox Code Playgroud)
这没有任何意义,因为我的bash脚本只为i386配置OpenSSL(我正在循环执行这两个操作,但是一旦我开始遇到这些问题就删除了x86_64).
我在这里和这里尝试过类似的SO问题的答案.但是,那些产生了相同的结果.此外,OpenSSL Wiki上的Mac安装说明也没有任何帮助.
我的脚本:
Build.sh
projectDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ARCHS=("i386")
FIPS_VERSION="2.0.12"
OPENSSL_VERSION="1.0.2g"
rm -rf openssl* fips*
if [ -d "out" ]; then
rm -rf …Run Code Online (Sandbox Code Playgroud) 我已经访问了所有其他问题,但从我看来,没有一个是我的问题。
在 MacBook Pro 16GB 内存 Intel Core I7 上运行 OS X El Capitan 10.11.6
我也运行了 brew doctor ,但没有看到任何会导致此问题的问题。下面是我的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.0.0)
project(WebClient VERSION 0.0.0)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPLIER_SUPPORTS_CXX14)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPLIER_SUPPORTS_CXX0X)
if(COMPLIER_SUPPORTS_CXX14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support.
Please use a different C++ compiler.")
endif()
FIND_PACKAGE( Boost 1.62 COMPONENTS program_options REQUIRED )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
set(OPT_CPPFLAGS "-I/usr/local/opt/openssl/include -I/usr/local/opt/libiconv/include")
set(OPT_LDFLAGS "-v -lcpprest -lboost_system -L/usr/local/opt/openssl/lib -L/usr/local/opt/libiconv/lib -lcrypto -lssl")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPT_CPPFLAGS} -v …Run Code Online (Sandbox Code Playgroud) 我想用OpenSSL创建一个自签名证书(root ca).签名算法需要是具有SHA-256哈希的ECDSA签名.在我的Mac OS X(优胜美地)上,我安装了OpenSSL版本0.9.8zc(从2014年10月15日起).当我openssl ciphers -v在命令行上调用时,似乎我当前的OpenSSL版本不支持SHA2(使用SHA-256等).
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1
AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1
DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1
DES-CBC3-MD5 SSLv2 Kx=RSA Au=RSA Enc=3DES(168) Mac=MD5
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
DHE-RSA-SEED-SHA SSLv3 Kx=DH Au=RSA Enc=SEED(128) Mac=SHA1
DHE-DSS-SEED-SHA SSLv3 Kx=DH Au=DSS Enc=SEED(128) Mac=SHA1 …Run Code Online (Sandbox Code Playgroud)