Usando MAMP 3.4, come posso aggiornare ad Apache 2.4 e OpenSSL 1.0.2 per soddisfare i requisiti di iOS 9 di ATS?

2

Ho appena installato MAMP 3.4 su Yosemite ma la versione di Apache al suo interno è ancora 2.2. C'è un modo per aggiornare ad Apache 2.4? Inoltre ho installato tramite brew openssl 1.0.2 ma MAMP Apache inizia ancora con la versione OpenSSL / 0.9.8zg. Perché? Ho bisogno di questi aggiornamenti per soddisfare i nuovi requisiti di iOS 9 di ATS.

    
posta Lory Lory 22.09.2015 - 13:00
fonte

2 risposte

1

A partire dal 21 luglio 2016, è disponibile una versione preliminare di MAMP PRO 4 che include OpenSSL 1.0.2, ottenere la pre-versione qui:

link

    
risposta data 21.07.2016 - 18:10
fonte
4

Per Mac OS X Yosemite

  1. Aggiornamento openssl da brew alla versione > = 1.0.2d
  2. TLS 1.2 funziona solo con apache 2.4 e attualmente MAMP viene ancora fornito con apache 2.2. SOLUZIONE: scarica e installa l'ultima versione di AMPPS che esegue una versione di apache 2.4.x
  3. crea un certificato autofirmato con sha256 (come richiesto da iOS 9) con

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

e salva server.key e server.crt in /Applications/AMPPS/apache/conf

  1. Assicurati che i moduli ssl siano caricati nel file httpd.conf di AMPPS
  2. Modifica file /Applications/AMPPS/apache/conf/extra/httpd-ssl.conf aggiungendo:

<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>

inside

<IfModule ssl_module> ... </IfModule> 
  1. Il simulatore di iOS 9 ti infastidisce ogni volta che usi NSURLSession generando un errore 9813 che dice che il certificato non è valido (perché è autofirmato). Pertanto, in ogni classe in cui utilizzerai NSURLSession, ad esempio, segui la seguente procedura:

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

...
}

in cui la funzione URLSession è un delegato che impedirà l'arresto anomalo dell'app a causa del certificato autofirmato e accetterà comunque.

    
risposta data 22.09.2015 - 21:08
fonte

Leggi altre domande sui tag