¿Cómo actualizar OpenSSL en OS X?

126

Hoy la heartbleed OpenSSL explotar fue anunciado en la naturaleza, que permite a un atacante para detectar de manera subrepticia y robar claves de servidor privado (lo que les permite MitM y descifrar los datos cifrados y robar contraseñas). Esto afecta a las versiones de OpenSSL, incluida la 1.0.1f, que es la versión de mi computadora Mavericks actualizada Mac (porque usé port / brew para instalar otro software que actualizó mi openssl sin que me diera cuenta ):

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

Esto demuestra que no estoy usando la versión Mavericks de OpenSSL:

$ which openssl
/opt/local/bin/openssl

OpenSSL lanzó una solución hoy en 1.0.1g y me pregunto cómo puedo instalar esta versión fija sobre mi versión actual.

dr jimbob
fuente
16
Usted está no utilizando la versión que viene con OS X Mavericks - que es 0.9.8y, que no tiene el fallo heartbleed (que se introdujo en 1.0.1). Su mejor ruta de actualización dependerá de dónde y cómo instaló la versión más reciente. which opensslPodría ser informativo. Además, el principal problema no es el comando openssl, son las bibliotecas openssl (que son utilizadas por otros programas), que no son compatibles con API entre las versiones 0.9.xy 1.0.x, por lo que no desea actualizar el bibliotecas openssl proporcionadas por el sistema!
Gordon Davisson el
@GordonDavisson: tienes toda la razón. Estaba equivocado. Aparentemente había instalado MacPorten algún momento en esta máquina que actualizó mi openssl. (Probablemente cuando estaba tratando de hacer que python2.7 funcionara). Probablemente debería eliminar esta pregunta, pero en caso de que otros cometan el mismo error, la gran respuesta de SapphireSun será útil).
dr jimbob
Con esa actualización aclaratoria, lo dejaría. Probablemente haya otras personas en el mismo barco, y tener esto aquí debería darles una idea de lo que hay que hacer.
Gordon Davisson el
2
Si instala OpenSSL con brew , no vinculará los archivos binarios a / usr / bin. Por lo tanto, no se ejecutará si emite un openssl en la línea de comandos.
Max Ried el
@MaxRied ¿cómo ejecutas la versión que instaló homebrew? Instalé el nuevo openssl por instrucciones en la respuesta aceptada, y openssl versiondevuelve 1.0.1g, pero ¿estás diciendo que los opensslcomandos no están usando esa versión?
inorganik

Respuestas:

147

Para lo que vale, acabo de usar homebrew ( http://brew.sh/ ):

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

Si aparece una de las versiones malas (1.0.1a-f), puede averiguar qué versión de openssl está utilizando de esta manera:

which openssl

A menudo esto es de / usr / bin. Para asegurarse de obtener la versión actualizada, coloque un enlace simbólico en / usr / local / bin para señalar el openssl actualizado, de esta manera:

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

Como alternativa a ese paso final, algunas personas reemplazan el openssl /usr/bincon un enlace simbólico a /usr/local/Cellar/openssl/1.0.1g/bin/openssl(o cualquiera que sea su versión):

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

Pero se sabe que esto causa problemas con algunas versiones más recientes de OSX. Es mejor insertar un nuevo enlace simbólico en / usr / local / bin, que debería tener prioridad en su ruta sobre / usr / bin.

ZafiroSun
fuente
77
No elimine el original, solo cámbiele el nombre. Si encuentra que la versión construida por Homebrew no funciona para algún propósito, no hay razón para levantarse sin una paleta (de trabajo).
Terry N
1
Es justo, pero por otro lado, no llamaría a esa versión funcionando ...
SapphireSun
1
Incluso con la vulnerabilidad, sigue siendo útil para usted en cualquier situación en la que esté dispuesto a correr el riesgo calculado para que la aplicación X (que depende de ella) funcione brevemente. O, si lo prefiere ... "trabajando" en el sentido de que una paleta rota aún puede empujar el agua. :-p
Terry N
8
Solo una nota: después de realizar estos pasos, al escribir "openssl" en la ventana del terminal se produjo un error "no existe tal archivo o directorio" que apuntaba a la copia anterior (pero funcionó en una nueva ventana del terminal). Para arreglar la ventana de terminal en la que estaba trabajando, necesitaba hacer lo siguiente:hash -r
Mike Hedman
66
Mejor que crear un enlace simbólico en /usr/bin/openssl, uno puede crear el enlace en /usr/local/bin/openssl. Eso debería preceder /usr/bina su $PATHproblema y evitar cualquier problema que surja de la "Protección de integridad del sistema" en las versiones más recientes de OS X.
mrKelley
14

O para aquellos que usan puertos mac, y no están preocupados por mantener la versión

sudo port upgrade openssl

simples :-)

mammix2
fuente
3
sudo port upgrade outdatedTambién funciona.
Dr. Jimbob
1
Eso es divertido, tener tanto macports como brew tanto instalar openssl en mi máquina fue en realidad la causa de que esto me sucediera. Correr sudo port -f uninstall openssl @<old-version>hizo el truco para mí :)
Yair
@yair tener macports y homebrew causará muchos problemas
user151019
6

Para resolver el crecimiento de memoria ilimitada de la extensión de solicitud de estado de OCSP (CVE-2016-6304) en macOS Sierra brewcon la Protección de integridad del sistema habilitada:

  1. Ajuste temporalmente los permisos /usr/localpara que brew pueda actualizar:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  2. Instale la versión actualizada de OpenSSL (probablemente desee 1.0.2i):

    brew install openssl
    
  3. Es posible que desee / necesite eliminar un enlace simbólico existente para openssl de /usr/local/bin:

    rm /usr/local/bin/openssl
    
  4. Vuelva a vincular la versión de preparación adecuada:

    sudo ln -s /usr/local/Cellar/openssl/1.0.2i/bin/openssl /usr/local/bin/openssl
    
  5. Restaurar permisos originales en /usr/local/bin:

    sudo chown root:wheel /usr/local
    
Brandonscript
fuente
En mi caso, la versión anterior de OpneSSL se encuentra en / usr / bin. Falla al intentar cambiar el permiso del contenedor.
Ramis
¿Estás usando Sudo?
brandonscript
Si. Yo solía sudo. Encontré un comentario que en la última versión del OS X aquí no hay forma de cambiar el permiso de este archivo. Entonces dejo de lograrlo.
Ramis
¿Por qué no simplemente cambiar su $PATHvariable para mirar /usr/local/bin?
brandonscript
Hola a todos, estoy confundido por todas las respuestas, la caída de enlaces simbólicos, enlaces, errores de heartbleed, etc. Cuando corro $ openssl versionme sale OpenSSL 0.9.8zh 14 Jan 2016pero cuando corro $ brew install opensslme sale Warning: openssl 1.0.2l is already installed. ¿Esto significa que tengo dos versiones instaladas? ¿Qué debo hacer exactamente ahora?
Joshua
1

Quien no quiera usar brew o puertos y solo quiera reemplazar la instalación predeterminada de OpenSSL 0.9.8 siempre puede deshabilitar la protección de integridad del sistema reiniciando en modo de recuperación (cmd + R) y emitiendo

csrutil disable

y luego compila openssl con

./config --prefix=/usr
make install

Reemplazó con éxito OpenSSL en ElCapitan para mí y pude compilar curl y apache httpd 2.4 sin ningún problema directamente de las fuentes. El razonamiento detrás del método que algunos podrían considerar drástico es que Apple ya no mantiene ElCapitan y no hay actualizaciones disponibles, por lo que es probable que no se rompa. En segundo lugar, le ahorra apuntar a la carpeta openssl en / usr / local para cada programa que compila haciendo que la compilación sea más robusta.

Захар Joe
fuente