【问题标题】:OpenSSL on Mac OS X for SHA-256 signature algorithmMac OS X 上的 OpenSSL 用于 SHA-256 签名算法
【发布时间】:2015-04-23 05:04:55
【问题描述】:

我想使用 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”一开始就说:

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

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

谁能告诉我是否可以在优胜美地上使用带有 OpenSSL 安装的 SHA-256 签名算法?如果这不可能,我觉得很奇怪,但我不是这个领域的专家。 希望有好的提示!

【问题讨论】:

标签: macos openssl sha256 ecdsa


【解决方案1】:

在 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 或自行链接到它。

【讨论】:

    【解决方案2】:

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

    可以,但您需要安装更新版本的 OpenSSL。 OS X 的 0.9.8 缺少椭圆曲线支持(除其他外)。


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

    “感谢 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
    

    在运行make install 之前,对dylibs 进行泡沫、冲洗和重复操作。注意: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) 的集合,因此您可以像指定任何其他对象文件一样指定它们。

    【讨论】:

      【解决方案3】:

      终于知道怎么弄了:

      1. 使用命令安装自制软件(参见http://brew.sh/index.htmlruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
      2. 使用命令brew install openssl 安装最新的openssl 版本
      3. 在终端运行brew link --force openssl,打开一个新终端并在其中运行which openssl -> 将显示/usr/local/bin/openssl
      4. 多田!现在,如果你运行openssl version,它将显示OpenSSL 1.0.2 22 Jan 2015(如果你没有运行brew link --force openssl,它将显示OpenSSL 0.9.8zc 15 Oct 2014

      :) (在 Update OpenSSL on OS X with Homebrew 上找到提示,以前不知道自制软件,或者我需要它来运行最新的 openssl。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-07
        • 2017-09-14
        • 1970-01-01
        • 2016-05-22
        • 2016-11-23
        相关资源
        最近更新 更多