OpenSSL в Mac OS X для алгоритма подписи SHA-256

Я хочу создать самозаверяющий сертификат (root ca) с OpenSSL. Алгоритм подписи должен быть подписью ECDSA с хэшем SHA-256. В моей Mac OS X (Yosemite) у меня установлена ​​версия OpenSSL 0.9.8zc (от 15 октября 2014 г.). Когда я вызываю 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» говорит прямо в начале:

«Благодаря Рою Вуду теперь предоставляется первоначальная поддержка Mac OS (pre X)».

Моя попытка установить его, тем не менее, привела к некоторым ошибкам в командной строке.

Может ли кто-нибудь сказать мне, возможно ли как-то использовать алгоритм подписи SHA-256 с установкой OpenSSL на Yosemite? Мне кажется странным, если бы это было невозможно, но я не специалист в этой области. Надеюсь на хорошую подсказку!


person Marc    schedule 21.02.2015    source источник
comment
Дополнительная информация. Проблема с OpenSSL 0.9.8zc заключается в том, что алгоритм подписи, который должен использоваться самозаверяющим сертификатом, должен быть SHA-256. Однако моя версия OpenSSL всегда использует SHA-1 независимо от того, как я пытался указать SHA-256.   -  person Marc    schedule 21.02.2015
comment
Этот вопрос кажется не по теме, потому что он не о программировании или разработке. См. раздел О каких темах я могу задать здесь в Справочном центре. Возможно, Суперпользователь, Unix & Linux Stack Exchange или Information Security Stack Exchange было бы лучше спросить.   -  person jww    schedule 22.02.2015


Ответы (3)


Наконец-то узнал, как это сделать:

  1. Установите доморощенный (см. http://brew.sh/index.html) с помощью команды ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. Установите новейшую версию openssl с помощью команды brew install 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)

:) (Нашел подсказки по обновить OpenSSL на OS X с помощью Homebrew, не знал о доморощенном до или после того, как мне это понадобилось, чтобы запустить обновленную версию openssl.

person Marc    schedule 21.02.2015

Может ли кто-нибудь сказать мне, возможно ли как-то использовать алгоритм подписи SHA-256 с установкой OpenSSL на Yosemite?

Да, но вам нужно установить более свежую версию OpenSSL. В OS X 0.9.8 отсутствует поддержка эллиптических кривых (среди прочего).


Последняя версия OpenSSL — 1.0.2, но исходный код доступен по адресу https://www.openssl.org/source/ не компилируется для OS X, так как файл Install.MacOS говорит в самом начале:

Благодаря Рою Вуду теперь предоставляется первоначальная поддержка Mac OS (pre X).

Игнорируйте это, потому что это неправильно.

См. вики OpenSSL в разделе Компиляция и установка. 30-секундный пролёт на 64-битной OS X:

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 на OS X. Короткий ответ: не пытайтесь, потому что это не будет работать из-за make-файлов OpenSSL.

Если вам нужна толстая библиотека, выполните следующие шаги:

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_PRELOAD и DYLD_LIBRARY_PATH (например, компиляция с 1.0.2 в /usr/local/ssl, но загрузка 0.9.8 во время выполнения в /usr/lib). Итак, моя компиляция выглядит примерно так:

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

Архив представляет собой набор объектных файлов (*.o), поэтому вы указываете их точно так же, как и любой другой объектный файл.

person jww    schedule 22.02.2015

На OSX Эль-Капитан

  • Установите доморощенный (см. http://brew.sh/index.html)
  • Установите новейшую версию openssl с помощью команды brew install openssl
  • Беги /usr/local/opt/openssl/bin/openssl sha256

Brew теперь отказывается связывать openssh с /usr/local/bin, даже если вы используете опцию --force, поэтому вам нужно запускать openssh из места установки brew или ссылаться на него самостоятельно.

person Derrick J Wippler    schedule 07.12.2017