Utilizando MAMP 3.4, ¿cómo me actualizo a Apache 2.4 y OpenSSL 1.0.2 para cumplir con los requisitos de ATS iOS 9?

2

Acabo de instalar MAMP 3.4 en Yosemite, pero la versión de Apache en su interior es todavía 2.2. ¿Hay alguna manera de actualizar a Apache 2.4? Además, lo he instalado a través de brew openssl 1.0.2 pero MAMP Apache aún comienza con la versión OpenSSL / 0.9.8zg. ¿Por qué? Necesito estas actualizaciones para cumplir con los nuevos requisitos de ATS para iOS 9.

    
pregunta Lory Lory 22.09.2015 - 13:00

2 respuestas

1

A partir del 21 de julio de 2016, hay una versión preliminar disponible de MAMP PRO 4 que incluye OpenSSL 1.0.2, obtenga la versión preliminar aquí:

enlace

    
respondido por el sMyles 21.07.2016 - 18:10
4

Para Mac OS X Yosemite

  1. Actualiza openssl by brew a la versión > = 1.0.2d
  2. TLS 1.2 funciona solo con apache 2.4 y, de hecho, MAMP todavía se administra con apache 2.2. SOLUCIÓN: descargue e instale la última versión de AMPPS que ejecuta una versión de apache 2.4.x
  3. cree un certificado autofirmado con sha256 (según lo solicitado por iOS 9) con

    openssl req -x509 -nodes -sha256 -days 365 -newkey rsa:2048 -keyout server.key -out server.crt

y guarde server.key y server.crt en /Applications/AMPPS/apache/conf

  1. Asegúrese de que los módulos ssl se carguen dentro del archivo httpd.conf de AMPPS
  2. Editar archivo /Applications/AMPPS/apache/conf/extra/httpd-ssl.conf agregando:


<VirtualHost localhost:443>
   DocumentRoot "/Applications/AMPPS/www"
   ServerName localhost
   SSLEngine on
   SSLProtocol all -SSLv2 -SSLv3
   SSLHonorCipherOrder on
   SSLCertificateFile "/Applications/AMPPS/apache/conf/server.crt"
   SSLCertificateKeyFile "/Applications/AMPPS/apache/conf/server.key"
</VirtualHost>

dentro

<IfModule ssl_module> ... </IfModule> 
  1. El simulador de iOS 9 lo molestará cada vez que use NSURLSession, lo que generará un error 9813 que indicará que el certificado no es válido (porque está autofirmado). Por lo tanto, en cada clase en la que vaya a utilizar NSURLSession, haga lo siguiente:


class LoginService: NSObject, NSURLSessionDelegate {

func URLSession(session: NSURLSession,
    task: NSURLSessionTask,
    didReceiveChallenge challenge: NSURLAuthenticationChallenge,
    completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?)
    -> Void) {

    completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential, NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!))
}

...

func requestLoginWithURL (requestURL: NSURL, completionHandler: (success: Bool?) -> Void) {
    let configuration =
    NSURLSessionConfiguration.defaultSessionConfiguration()

    let urlRequest: NSURLRequest = NSURLRequest(URL: requestURL)

    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue:NSOperationQueue.mainQueue())

    /*
    dataTaskWithRequest: creates an HTTP request for the specified URL request object, and calls a handler upon completion.
    */
    let task = session.dataTaskWithRequest(urlRequest, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in

...
}

donde la función URLSession es un delegado que evitará que la aplicación se bloquee debido al certificado autofirmado y aceptará de todos modos.

    
respondido por el Lory Lory 22.09.2015 - 21:08

Lea otras preguntas en las etiquetas