Como atualizar o OpenSSL no OS X?

126

Hoje, a exploração do OpenSSL foi anunciada na natureza, o que permite a um invasor detectar e roubar clandestinamente chaves de servidor privadas (permitindo que o MitM e descriptografem seus dados criptografados e roubem senhas). Isso afeta as versões do OpenSSL, incluindo a versão 1.0.1f, que é a versão atualizada do meu computador Mavericks Mac (porque usei o port / brew para instalar outro software que atualizou o meu openssl sem que eu percebesse ):

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

Isso demonstra que não estou usando a versão Mavericks do OpenSSL:

$ which openssl
/opt/local/bin/openssl

O OpenSSL lançou uma correção hoje na 1.0.1g e gostaria de saber como posso instalar esta versão fixa na minha versão atual?

dr jimbob
fonte
16
Você não está usando a versão que acompanha o OS X Mavericks - é 0.9.8y, que não possui o bug de coração partido (foi introduzido na 1.0.1). Seu melhor caminho de atualização dependerá de onde e como você instalou a versão mais recente. which opensslpode ser informativo. Além disso, o principal problema não é o comando openssl, são as bibliotecas openssl (que são usadas por outros programas) - essas não são compatíveis com a API entre as versões 0.9.xe 1.0.x, portanto, você não deseja atualizar o bibliotecas openssl fornecidas pelo sistema!
Gordon Davisson
@GordonDavisson - Você está totalmente certo. Eu estava errado. Aparentemente, eu havia instalado MacPortem algum momento nesta máquina que atualizou meu openssl. (Provavelmente quando eu estava tentando fazer o python2.7 funcionar). Provavelmente deve excluir esta pergunta, mas, caso outras pessoas cometam o mesmo erro, achem a grande resposta do SapphireSun útil).
dr jimbob
Com essa atualização esclarecedora, eu deixaria. Provavelmente, há outras pessoas no mesmo barco, e ter isso aqui deve dar uma ideia do que precisa ser feito.
Gordon Davisson
2
Se você instalar o OpenSSL com o brew, ele não vinculará os binários ao / usr / bin. Portanto, ele não será executado se você emitir um openssl na linha de comando.
Max Ried
@MaxRied, como você executa a versão que o homebrew instalou? Eu instalei o novo openssl por instruções na resposta aceita e openssl versionretorna 1.0.1g, mas você está dizendo que os opensslcomandos não estão usando essa versão?
Inorgik

Respostas:

147

Para o que vale, eu apenas usei homebrew ( http://brew.sh/ ):

brew update  
brew install openssl  
brew link --force openssl 
openssl version -a  

Se uma das versões ruins aparecer (1.0.1a-f), você pode descobrir qual versão do openssl está usando, desta maneira:

which openssl

Geralmente isso é de / usr / bin. Para garantir que você obtenha a versão atualizada, solte um link simbólico em / usr / local / bin para apontar para o openssl atualizado, como este:

ln -s /usr/local/Cellar/openssl/1.0.1g/bin/openssl /usr/local/bin/openssl

Como alternativa à etapa final, algumas pessoas substituem o openssl /usr/binpor um link simbólico para /usr/local/Cellar/openssl/1.0.1g/bin/openssl(ou qualquer que seja sua versão):

mv /usr/bin/openssl /usr/bin/openssl_OLD  
ln -s /usr/local/Cellar/openssl/1.0.1g/bin/openssl /usr/bin/openssl

Mas isso é conhecido por causar problemas em algumas versões mais recentes do OSX. Melhor apenas inserir um novo link simbólico em / usr / local / bin, que deve ter precedência no seu caminho sobre / usr / bin.

SapphireSun
fonte
7
Não exclua o original - apenas renomeie-o. Se você achar que a versão construída em Homebrew não funciona com algum objetivo, não há razão para se instalar em um riacho sem um remo (de trabalho).
Terry N
1
Fair suficiente, mas, por outro lado, eu não chamaria isso de versão de trabalho ...
SapphireSun
1
Mesmo com a vulnerabilidade, ainda é útil em qualquer situação em que você esteja disposto a correr o risco calculado para que o aplicativo X (que depende dele) funcione brevemente. Ou, se você preferir ... "trabalhar" no sentido de que uma pá quebrada ainda pode empurrar a água. :-p
Terry N
8
Apenas uma observação - depois de executar essas etapas, a digitação de "openssl" na janela do terminal falhou com um erro "sem esse arquivo ou diretório" apontando para a cópia antiga (mas funcionou em uma nova janela do terminal). Para corrigir a janela do terminal eu estava trabalhando, eu precisava fazer um:hash -r
Mike Hedman
6
Melhor do que criar um link simbólico em /usr/bin/openssl, é possível criar o link em /usr/local/bin/openssl. Que deve preceder /usr/binem seu $PATHe ignorar eventuais problemas decorrentes da "proteção da integridade do sistema" em versões mais recentes do OS X.
mrKelley
14

Ou para aqueles que usam portas mac e não estão preocupados em manter a versão

sudo port upgrade openssl

simples :-)

mammix2
fonte
3
sudo port upgrade outdatedtambém funciona.
dr jimbob
1
É engraçado, ter o macports e o brew instalar o openssl na minha máquina foi realmente a causa disso. Running sudo port -f uninstall openssl @<old-version>fez o truque para mim :)
yair
@yair tendo ambos MacPorts e homebrew vai causar muitos problemas
user151019
6

Para resolver extensão Status Request crescimento de memória ilimitada OCSP (CVE-2016-6304) no MacOS Sierra usando brewcom proteção da integridade do sistema ativado:

  1. Ajuste temporariamente as permissões /usr/localpara que o brew possa ser atualizado:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  2. Instale a versão atualizada do OpenSSL (você provavelmente deseja o 1.0.2i):

    brew install openssl
    
  3. Você pode querer / precisar excluir um link simbólico existente para o openssl em /usr/local/bin:

    rm /usr/local/bin/openssl
    
  4. Vincule novamente a versão correta do brew:

    sudo ln -s /usr/local/Cellar/openssl/1.0.2i/bin/openssl /usr/local/bin/openssl
    
  5. Restaure as permissões originais em /usr/local/bin:

    sudo chown root:wheel /usr/local
    
brandonscript
fonte
No meu caso, a versão antiga do OpneSSL está localizada em / usr / bin. Está falhando ao tentar alterar a permissão da lixeira.
Ramis
Você está usando o Sudo?
brandonscript
Sim. Eu usei sudo. Descobri que na versão mais recente do OS X não há como alterar a permissão desse arquivo. Então eu paro de alcançá-lo.
Ramis
Por que não mudar apenas sua $PATHvariável para procurar /usr/local/bin?
brandonscript
Oi pessoal, Estou confuso com todas as respostas, soltando o link simbólico, o link, o bug do coração, etc ... Quando corro $ openssl version, recebo, OpenSSL 0.9.8zh 14 Jan 2016mas quando corro $ brew install openssl, recebo Warning: openssl 1.0.2l is already installed. Isso significa que tenho duas versões instaladas? O que exatamente devo fazer agora?
Joshua
1

Quem não quiser usar brew ou portas e apenas quiser substituir a instalação padrão do OpenSSL 0.9.8 sempre pode desativar a proteção de integridade do sistema, reiniciando no modo de recuperação (cmd + R) e emitindo

csrutil disable

e depois compile o openssl com

./config --prefix=/usr
make install

Ele substituiu com sucesso o OpenSSL no ElCapitan para mim e eu pude compilar o httpd 2.4 do curl e do apache sem nenhum problema diretamente das fontes. O raciocínio por trás do método que alguns podem considerar drástico é que o ElCapitan não é mais mantido pela Apple e não há atualizações futuras, portanto, provavelmente não será interrompido. Em segundo lugar, evita que você aponte para a pasta openssl em / usr / local para todos os programas que você compila, tornando a compilação mais robusta.

Joeахар Joe
fonte