He instalado MAMP 3.4 en Yosemite, pero la versión de Apache interior es todavía 2.2. Es allí una manera de actualizar a Apache 2.4? Además he instalado a través de la cerveza openssl 1.0.2 pero MAMP Apache sigue siendo comienza con la versión de OpenSSL/0.9.8 zg. Por qué? Yo necesito este tipo de actualizaciones con el fin de cumplir con los nuevos ATS iOS 9 requisitos.
Respuesta
¿Demasiados anuncios?Para Mac OS X Yosemite
- Actualización de openssl por cerveza a la versión >= 1.0.2 d
- TLS 1.2 funciona sólo con apache 2.4 y en realidad MAMP se sigue dando con apache 2.2. SOLUCIÓN: descargue e instale la versión más reciente de AMPPS que ejecuta una versión de apache 2.4.x
-
crear 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 ahorrar server.key
y server.crt
a /Applications/AMPPS/apache/conf
- Asegúrese de que ssl módulos se cargan en el interior de httpd.conf archivo de AMPPS
- Editar el archivo
/Applications/AMPPS/apache/conf/extra/httpd-ssl.conf
agregar:
<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 de
<IfModule ssl_module> ... </IfModule>
- iOS 9 simulador va a molestar cada vez que usted usa NSURLSession provocar un error 9813 diciendo que el certificado no es válido (porque es un auto firmado). Así que en cada clase donde se va a utilizar NSURLSession hacer, por ejemplo, los siguientes:
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 será evitar que la aplicación se bloquea debido a que el certificado autofirmado y aceptará de todos modos.