Mac OS X上的OpenSSL用于SHA-256签名算法

时间:2015-02-21 15:07:11

标签: macos openssl sha256 ecdsa

我想用OpenSSL创建一个自签名证书(root ca)。签名算法需要是具有SHA-256哈希的ECDSA签名。 在我的Mac OS X(Yosemite)上,我安装了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
SEED-SHA                SSLv3 Kx=RSA      Au=RSA  Enc=SEED(128) Mac=SHA1
RC2-CBC-MD5             SSLv2 Kx=RSA      Au=RSA  Enc=RC2(128)  Mac=MD5 
RC4-SHA                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=SHA1
RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5 
RC4-MD5                 SSLv2 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5 
EDH-RSA-DES-CBC-SHA     SSLv3 Kx=DH       Au=RSA  Enc=DES(56)   Mac=SHA1
EDH-DSS-DES-CBC-SHA     SSLv3 Kx=DH       Au=DSS  Enc=DES(56)   Mac=SHA1
DES-CBC-SHA             SSLv3 Kx=RSA      Au=RSA  Enc=DES(56)   Mac=SHA1
DES-CBC-MD5             SSLv2 Kx=RSA      Au=RSA  Enc=DES(56)   Mac=MD5 
EXP-EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH(512)  Au=RSA  Enc=DES(40)   Mac=SHA1 export
EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512)  Au=DSS  Enc=DES(40)   Mac=SHA1 export
EXP-DES-CBC-SHA         SSLv3 Kx=RSA(512) Au=RSA  Enc=DES(40)   Mac=SHA1 export
EXP-RC2-CBC-MD5         SSLv3 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export
EXP-RC2-CBC-MD5         SSLv2 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export
EXP-RC4-MD5             SSLv3 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export
EXP-RC4-MD5             SSLv2 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export

最新版本的OpenSSL似乎是1.0.2,但是https://www.openssl.org/source/的可用源代码似乎不适用于OS X,因为文件“Install.MacOS”在开头就说明了: / p>

“感谢Roy Wood对Mac OS的初步支持(前 X)现在提供。“

我尝试安装它但导致命令行出现一些错误。

有人能告诉我,是否可以在Yosemite上使用SHA-256签名算法和OpenSSL安装?如果这不可能,我觉得很奇怪,但我不是这个领域的专家。 希望得到一个好的暗示!

3 个答案:

答案 0 :(得分:5)

终于找到了如何做到这一点:

  1. 使用命令安装自制程序(请参阅http://brew.sh/index.htmlruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. 使用命令brew install openssl
  3. 安装最新的openssl版本
  4. 在终端中运行brew link --force openssl,打开一个新的并在其中运行which openssl - >会告诉你/usr/local/bin/openssl
  5. 多田!现在,如果您运行openssl version,它将显示OpenSSL 1.0.2 22 Jan 2015(如果您在显示brew link --force openssl之前未运行OpenSSL 0.9.8zc 15 Oct 2014
  6. :) (找到Update OpenSSL on OS X with Homebrew上的提示,之前不知道自制软件或我需要它来获取最新的openssl运行。

答案 1 :(得分:1)

  

有人能告诉我,是否可以在Yosemite上使用SHA-256签名算法和OpenSSL安装?

是的,但您需要安装更新版本的OpenSSL。 OS X的0.9.8缺乏椭圆曲线支持(等等)。


  

最新版本的OpenSSL似乎是1.0.2,但是https://www.openssl.org/source/的可用源代码似乎不适用于OS X,因为文件“Install.MacOS”在开头就说明了: / p>      

“感谢Roy Wood现在提供的对Mac OS(前X)的初始支持。”

忽略它,因为它错了。

请参阅Compilation and Installation上的OpenSSL wiki。 64位OS X上的30秒飞越:

export KERNEL_BITS=64
cd openssl
./config shared no-ssl2 no-ssl3 no-comp enable-ec_nistp_64_gcc_128 --openssldir=/usr/local
make all
sudo make install

忽略关于make depend的提示,因为您不需要它。


相关:如果你想构建一个胖胖的OpenSSL,那么请看这个问题:Build Multiarch OpenSSL on OS X。简短的回答是,不要尝试,因为它不会因OpenSSL makefile而起作用。

如果您需要胖库,请执行以下步骤:

export KERNL_BITS=64
./configure ...
...

mv libcrypto.a libcrypto-x86_64.a 
mv libssl.a libssl-x86_64.a

make clean && make dclean
export KERNL_BITS=32
./configure ...
...

mv libcrypto.a libcrypto-i386.a 
mv libssl.a libssl-i386.a

lipo -create libcrypto-x86_64.a libcrypto-i386.a -output libcrypto.a
lipo -create libssl-x86_64.a libssl-i386.a -output libssl.a

sudo make install

在运行dylibs之前,对make install进行泡沫,冲洗和重复。注意:i386应该使用enable-ec_nistp_64_gcc_128(IIRC)。


当您需要在程序中使用OpenSSL时,您将使用/usr/local/ssl/include作为标题路径,并使用/usr/local/ssl/lib作为库路径。

事实上,我不使用库路径,因为OS X的链接器会忽略您对静态链接的请求。我使用静态链接来避免LD_PRELOADDYLD_LIBRARY_PATH问题和技巧(比如在/usr/local/ssl中编译1.0.2,但在运行时在/usr/lib中加载0.9.8)。所以我的编译看起来像:

gcc foo.c bar.c /usr/local/ssl/lib/libcrypto.a -o foobar.exe

归档是目标文件(*.o)的集合,因此您可以像任何其他目标文件一样指定它们。

答案 2 :(得分:0)

OSX El Capitan

  • 安装自制程序(请参阅http://brew.sh/index.html
  • 使用命令brew install openssl
  • 安装最新的openssl版本
  • 运行/usr/local/opt/openssl/bin/openssl sha256

Brew现在拒绝将openssh链接到/usr/local/bin即使您使用--force选项,因此您必须从brew安装位置运行openssh或自行链接到它。