Wie aktualisiere ich mit MAMP 3.4 auf Apache 2.4 und OpenSSL 1.0.2, um die Anforderungen von ATS iOS 9 zu erfüllen?

Ich habe gerade MAMP 3.4 auf Yosemite installiert, aber die darin enthaltene Apache-Version ist immer noch 2.2. Gibt es eine Möglichkeit, auf Apache 2.4 zu aktualisieren? Außerdem habe ich über Brew openssl 1.0.2 installiert, aber MAMP Apache startet immer noch mit Version OpenSSL/0.9.8zg. Warum? Ich benötige diese Updates, um die neuen ATS iOS 9-Anforderungen zu erfüllen.

Interessant - ich müsste mich fragen, ob dies mit einer VM einfacher wäre - mit Vagrant oder etwas zu helfen, anstatt MAMP insgesamt zu verwenden? In jedem Fall schlage ich vor, dass Sie Ihre eigene Frage beantworten, indem Sie Ihre bearbeitete Lösung in eine Antwort verschieben. Dies macht es für andere Benutzer, die auf der Suche nach einer ähnlichen Lösung sind, klarer.
Vielen Dank für Ihren Kommentar. Ich fürchte, ich weiß nicht, was Vagrant ist, aber die Idee einer VM ist vielleicht ganz gut. Denken Sie auf jeden Fall daran, dass MAMP nicht verwendet werden kann, da es tatsächlich nur Apache 2.2 ausführt, während Apache 2.4.x für TLS 1.2 unbedingt erforderlich ist
Ah - ich habe diesen wichtigen Hinweis in Ihrer Antwort verpasst. Vagrant hilft Ihnen lediglich bei der Verwaltung von VMs. Sie würden einige Bereitstellungsskripts schreiben, die Ihren Computer mit den Tools erstellen, die Sie benötigen, und dann vagrant upalle ausführen und die VM starten.
Ich verstehe, danke für deine Erklärung. Leider weiß ich nichts über VMs und allgemein Low-Level-Programmierung :(

Antworten (2)

Ab dem 21. Juli 2016 ist eine Vorabversion von MAMP PRO 4 verfügbar, die OpenSSL 1.0.2 enthält. Holen Sie sich die Vorabversion hier:

https://www.mamp.info/en/pre-release.html

Zu guter Letzt!! Das ist eine sehr gute Nachricht! Danke, Mann!
Gern geschehen, ich war in der gleichen Position wie du, also musste ich diese Informationen teilen :)

Für Mac OS X Yosemite

  1. Aktualisieren Sie openssl by Brew auf Version >= 1.0.2d
  2. TLS 1.2 funktioniert nur mit Apache 2.4 und eigentlich ist MAMP noch mit Apache 2.2 gegeben. LÖSUNG: Laden Sie die neueste Version von AMPPS herunter und installieren Sie sie , auf der eine Version von Apache 2.4.x ausgeführt wird
  3. Erstellen Sie ein selbstsigniertes Zertifikat mit sha256 (wie von iOS 9 angefordert) mit

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

       und speichern server.keyund server.crthinein/Applications/AMPPS/apache/conf

  1. Stellen Sie sicher, dass SSL-Module in der Datei httpd.conf von AMPPS geladen sind
  2. Datei /Applications/AMPPS/apache/conf/extra/httpd-ssl.confhinzufügen hinzufügen:


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

innen

<IfModule ssl_module> ... </IfModule> 
  1. Der iOS 9-Simulator wird Sie jedes Mal ärgern, wenn Sie NSURLSession verwenden, indem er einen Fehler 9813 auslöst, der besagt, dass das Zertifikat nicht gültig ist (weil es selbst signiert ist). Gehen Sie also in jeder Klasse, in der Sie NSURLSession verwenden werden, beispielsweise wie folgt vor:


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

...
}

wobei die Funktion URLSessionein Delegat ist, der verhindert, dass die App aufgrund des selbstsignierten Zertifikats abstürzt, und es trotzdem akzeptiert.