Vous êtes sur la page 1sur 9

HTTP Strict Transport Security

De Wikipedia, la enciclopedia libre


HTTP Strict Transport Security (o Seguridad de transporte HTTP estricta) (HSTS) es un mecanismo de
poltica de seguridad web segn la cual un servidor web declara a los agentes de usuario compatibles (por ejemplo,
un navegador web) que deben interactuar con ellos solamente mediante conexiones HTTP seguras (es decir, en
capas HTTP sobre TLS/SSLnotas 1 ). HSTS es un protocolo de normas de IETF y se especifica en el RFC 6797.
La poltica HSTS1 es comunicada por el servidor al agente de usuario a travs de un campo de la cabecera HTTP
de respuesta denominado "Strict-Transport-Security". La poltica HSTS especifica un perodo de tiempo
durante el cual el agente de usuario deber acceder al servidor slo en forma segura.

ndice
1 Historia
2 Resumen del mecanismo HSTS
3 Aplicabilidad
4 Limitaciones
5 Soporte de navegadores
6 Implementaciones
7 Vase tambin
8 Notas y Referencias
8.1 Notas
9 Enlaces externos

Historia
La especificacin HSTS se public como RFC 6797 el 19 de noviembre 2012 despus de ser aprobado el 2 de
octubre 2012 por la IESG para su publicacin como un estndar propuesto RFC.2 Los autores originalmente lo
presentaron como Borrador de Internet el 17 de junio de 2010. Fue con la conversin a un Borrador de Internet
que el nombre de la especificacin se modific a "Seguridad de Transporte HTTP estricta" desde el original
"seguridad de transporte estricta" (STS). La razn de este cambio de nombre fue debido a que era especfica para
HTTP3 notas 2 . La ltima "versin comunitaria" de la entonces llamada especificacin "STS" fue publicada el 18 de
diciembre de 2009, con revisiones basadas en la retroalimentacin de la comunidad.4 El borrador de la
especificacin original de Jeff Hodges5 de PayPal, Collin Jackson6 y Adam Barth,7 fue publicado el 18 de
septiembre de 2009.8
La especificacin HSTS est basado en obra original de Jackson y Barth como se describe en su artculo
ForceHTTPS: Protecting High-Security Web Sites from Network Attacks.9
Adems, HSTS es la realizacin de una faceta de una visin global para mejorar la seguridad web, presentada por
Jeff Hodges y Andy Steingruebl en su artculo del 2010: The Need for Coherent Web Security Policy
Framework(s).10

Resumen del mecanismo HSTS


Cuando una aplicacin web11 enva la poltica HSTS al agente del usuario, los que cumplan con el estndar se
comportan de la siguiente manera:12
1. Automticamente activan los vnculos inseguros que hacen referencia a la aplicacin web en enlaces seguros.
(Por
ejemplo,
http://example.com/some/page/
se
modificar
a
https://example.com/some/page/antes de acceder al servidor.)
2. Si la seguridad de la conexin no se puede asegurar (por ejemplo, el certificado TLS del servidor es
autofirmado), muestran un mensaje de error y no permiten al usuario acceder a la aplicacin web.
La poltica HSTS ayuda a proteger a los usuarios de aplicaciones web contra algunos ataques de red pasivos
(eavesdropping) y activos.13 Un atacante man-in-the-middle tiene una capacidad muy reducida para interceptar las
peticiones y respuestas entre un usuario y un servidor de aplicaciones web, mientras que el navegador del usuario
tenga una poltica HSTS vigente para esa aplicacin web.

Aplicabilidad
La vulnerabilidad de seguridad ms importante que HSTS puede prevenir es la extraccin de SSL (SSL-stripping)
en ataques man-in-the-middle, introducidas por primera vez por Moxie Marlinspike en su charla "New Tricks to
defeat SSL in Practice" en la BlackHat Federal de 2009.14 El ataque de extraccin SSL funciona (tanto en SSL
como en TLS) convertiendo una conexin segura HTTPS a una conexin plana en HTTP transparentemente. El
usuario puede ver que la conexin es insegura, pero fundamentalmente no hay forma de saber si la conexin debe
ser segura. Muchos sitios web no utilizan TLS/SSL, por lo tanto, no hay forma de saber (sin conocimientos
previos) si el uso de HTTP plano se debe a un ataque, o simplemente porque el sitio no ha implementado
TLS/SSL. Adems, no hay advertencias que se presenten al usuario durante el proceso de bajada, haciendo que el
ataque bastante sutil para todos menos el ms vigilante. La herramienta sslstrip de Marlinspike automatiza
completamente el ataque.
HSTS soluciona este problema,13 informando al navegador que las conexiones al sitio siempre debe usar TLS /
SSL. La cabecera HSTS puede ser despojada por el atacante si esta es la primera visita del usuario. El navegador
Chrome intenta limitar este problema mediante la inclusin de una lista de sitios HSTS "pre-cargada"15
Desafortunadamente, esta solucin no puede ampliarse para incluir todos los sitios web en Internet. Una posible
solucin podra lograrse mediante el uso de los registros DNS para declarar la poltica HSTS y acceder de forma
segura a travs de DNSSEC, opcionalmente con huellas digitales de certificados para asegurar su validez.16 HSTS
tambin puede ayudar a evitar tener una cookie de inicio de sesin basado sitio web credenciales robadas por
herramientas ampliamente disponibles, como Firesheep.17

Limitaciones
La solicitud inicial permanece sin proteccin contra ataques activos si utiliza un protocolo no seguro, como HTTP
plano o si la URI de la solicitud inicial se obtuvo a travs de un canal inseguro.18 Lo mismo se aplica a la primera
peticin despus de que el perodo de actividad que se especifican en la poltica HSTS anunciada max-age (los

sitios deben establecer un perodo de varios das o meses dependiendo de la actividad del usuario y su
comportamiento). Google Chrome aborda esta limitacin mediante la implementacin de una "lista STS
precargada".19
Incluso con dicha "lista de STS precargado", HSTS no puede evitar los ataques avanzados como BEAST o
CRIME (ambos fueron presentados por Juliano Rizzo y Thai Duong). Esto es porque los ataques son contra
TLS/SSL en s, y por lo tanto son ortogonales a la aplicacin de la poltica HSTS.
Consulte el RFC 6797 para una discusin general de las consideraciones de seguridad HSTS.20

Soporte de navegadores
Google Chrome admite HSTS partir de la versin 4.0.211.0.21
HSTS est incluido en Firefox 4.22 Con Firefox 17, Mozilla da una lista de sitios web que soportan HSTS.23
Opera 1224
La extensin NoScript para Firefox impone HSTS partir de la versin 1.9.8.9.25
La extensin HTTPS Everywhere26 para Firefox, derivada de NoScript, generaliza el concepto de HSTS,
para incluir subconjuntos de los caminos en algunos dominios y reescritura de URI inseguros http:// en un
dominio para obtener los https:// en otro. (por ejemplo, de http://en.wikipedia.org/wiki/ a
https://secure.wikimedia.org/wikipedia/en/wiki/)
Internet SSL Survey 2010 v1.627
STS - Los Proyectos Chromium28

Implementaciones
Las cabeceras STS deben ser enviadas solamente a travs de las respuestas HTTPS. Las implementaciones de
cliente no deben respetar los encabezados enviados a travs de respuestas no HTTPS o respuestas sobre HTTPS
que no utilizan certificados de confianza correctamente configurados. Los fragmentos de configuracin de servidor
siguientes deben estar dentro del contexto de un bloque de configuracin de sitio SSL, y los ejemplos de cdigo
estn destinados a estar dentro del contexto de respuestas HTTPS solamente.
Tenga en cuenta que el mximo de edad se presenta en segundos. Los 31536000 segundos (12 meses) en los
siguientes ejemplos se pueden cambiar, dependiendo de cunto tiempo el operador del servidor web est
dispuesto a comprometerse a utilizar HTTPS solamente. Se recomienda establecer el mximo de edad a un valor
tan grande como 31536000 (12 meses) o 63072000 (24 meses).
Tenga en cuenta tambin que el encabezado HSTS slo se debe ajustar cuando se usa una conexin segura
(HTTPS) y no cuando se utiliza HTTP.29
Implementacin en Apache:

# load module (example using [RHEL])


LoadModule headers_module modules/mod_headers.so
# redirect all HTTP to HTTPS (optional)
<VirtualHost *:80>

ServerAlias *
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</VirtualHost>
# HTTPS-Host-Configuration
<VirtualHost 10.0.0.1:443>
# Use HTTP Strict Transport Security to force client to use secure connections only
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# Further Configuration goes here
[...]
</VirtualHost>

Implementacin en lighttpd.

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=31536000")
}

Implementacin en nginx.

# Use HTTP Strict Transport Security to force client to use secure connections only
add_header Strict-Transport-Security max-age=31536000;

# Use HTTP Strict Transport Security to force client to use secure connections only with includeSubdoma
add_header Strict-Transport-Security "max-age=31556926; includeSubdomains"

Implementacin en PHP.

// Use HTTP Strict Transport Security to force client to use secure connections only
$use_sts = true;
// iis sets HTTPS to 'off' for non-SSL requests
if ($use_sts && isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
header('Strict-Transport-Security: max-age=31536000');
} elseif ($use_sts) {
header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], true, 301);
// we are in cleartext at the moment, prevent further execution and output
die();
}

Implementacin en Perl CGI.

# Use HTTP Strict Transport Security to force client to use secure connections only
use CGI;
use URI;
my $q
= new CGI;
my $url = URI->new($cgi->request_uri)
my $use_sts = 1;
if ($use_sts and $url->scheme eq 'https') {
print $q->header('Strict-Transport-Security' => 'max-age=31536000');
} elsif ($use_sts) {
$url->scheme('https');
print $q->redirect(status => 301, location => $url);
}

Implementacin en Ruby on Rails.

class ApplicationController < ActionController::Base


before_filter :ensure_proper_protocol
private
def ensure_proper_protocol
if request.ssl?
response.headers['Strict-Transport-Security'] = 'max-age=31536000'
else
redirect_to "https://" + request.host + request.request_uri, :status => 301
end
end
end

Implementation in ASP.

'Use HTTP Strict Transport Security to force client to use secure connections only
Dim use_sts
use_sts = True
If use_sts = True And Request.ServerVariables("HTTPS") = "on" Then
Response.AddHeader "Strict-Transport-Security", "max-age=31536000"
ElseIf use_sts = True And Request.ServerVariables("HTTPS") = "off" Then
Response.Status = "301 Moved Permanently"
If Request.QueryString = "" Then
Response.AddHeader "Location", "https://" & Request.ServerVariables("SERVER_NAME") & Request
Else
Response.AddHeader "Location", "https://" & Request.ServerVariables("SERVER_NAME") & Request
End If
End If

Implementacin en C# / ASP.NET. Cdigo en el archivo global.asax:

// Use HTTP Strict Transport Security to force client to use secure connections only
protected void Application_BeginRequest()
{
switch (Request.Url.Scheme)
{
case "https":

Response.AddHeader("Strict-Transport-Security", "max-age=31536000");
break;
case "http":
var path = "https://" + Request.Url.Host + Request.Url.PathAndQuery;
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", path);
break;

Implementacin en ColdFusion Markup Language (CFML).

<!--- Use HTTP Strict Transport Security to force client to use secure connections only --->
<cfset use_sts = true>

<cfif use_sts is "True">


<cfif cgi.https is "on">
<cfheader name="Strict-Transport-Security" value="max-age=31536000">
<cfelse>
<cfheader statuscode="301" statustext="Moved permanently">
<cfheader name="Location" value="https://" + CGI.SERVER_NAME + CGI.SCRIPT_NAME + CGI.QUERY_STRI
</cfif>
</cfif>

Implementacin en JavaServer Pages (JSP) o Java Servlets.

// Use HTTP Strict Transport Security to force client to use secure connections only
boolean use_sts = true;
if(use_sts) {
if(request.getScheme().equals("https")) {
// Send HSTS header
response.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubdomains");
} else {
// Redirect to HTTPS
response.setStatus(301);
String url = "https://" + request.getServerName();
if(request.getPathInfo() != null) {
url = url + "/" + request.getPathInfo();
}
if(request.getQueryString() != null && request.getQueryString().length() > 0) {
url = url + "?" + request.getQueryString();
}
response.setHeader("Location", url);
}
}

Implementacin en Visual Basic .NET.

'Use HTTP Strict Transport Security to force client to use secure connections only
Dim use_sts As Boolean = True
If use_sts And Request.Url.Scheme = "https" Then
Response.AppendHeader("Strict-Transport-Security", "max-age=31536000")
ElseIf use_sts And Request.Url.Scheme = "http" Then
Response.Status = "301 Moved Permanently"

Response.AppendHeader("Location", "https://" & Request.Url.Host & Request.Url.PathAndQuery)


End If

Implementacin como Struts 2 interceptor en Java.

// Use HTTP Strict Transport Security to force client to use secure connections only
public class StrictTransportSecurityInterceptor extends AbstractInterceptor {
private static final Log logger = LogFactory.getLog(StrictTransportSecurityInterceptor.class);
private static final String HSTS_HEADER = "Strict-Transport-Security";
private static final String HSTS_VALUE_NAME = "max-age=";
private static final int HSTS_VALUE_IN_SECONDS = 31536000;
private static final String HSTS_VALUE_INCLUDE_SUBDOMAINS = "; includeSubDomains";

@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context = invocation.getInvocationContext();
HttpServletResponse response = (HttpServletResponse) context.get(StrutsStatics.HTTP_RESPONSE
String headerValue = HSTS_VALUE_NAME + HSTS_VALUE_IN_SECONDS;
response.addHeader(HSTS_HEADER, headerValue);
logger.debug("HSTS interceptor with policy: " + headerValue);
return invocation.invoke();
}

<interceptors>
<interceptor name="strictTransportSecurityInterceptor" class="yourPackage.StrictTransportSecurityInte
</interceptors>
<action name="yourActionName" class="yourPackage.YourAction">
<interceptor-ref name="strictTransportSecurityInterceptor"></interceptor-ref>
<result name="success">/success.jsp</result>
</action>

Vase tambin
Hypertext Transfer Protocol Secure

Notas y Referencias
1. Hodges, Jeff; Jackson, Collin; Barth, Adam (Nov 2012). Section 5.2. HSTS Policy
(https://tools.ietf.org/html/rfc6797#section-5.2). RFC 6797. IETF. Consultado el 21 Nov 2012.
2. [websec (https://www.ietf.org/mail-archive/web/websec/current/msg01401.html) Protocol Action: 'HTTP
Strict Transport Security (HSTS)' to Proposed Standard (draft-ietf-websec-strict-transport-sec-14.txt)] (2 Oct
2012). Consultado el 2 Oct 2012.
3.
Jeff
Hodges
(30
de
junio
de
2010).
Re:
[HASMAT
(http://www.ietf.org/mailarchive/web/hasmat/current/msg00025.html) "STS" moniker (was: IETF BoF @IETF-78 Maastricht:
HASMAT...)]. Consultado el 22 de julio de 2010.
4. Strict Transport Security -06 (http://lists.w3.org/Archives/Public/www-archive/2009Dec/att-0048/drafthodges-strict-transport-sec-06.plain.html) (18 de diciembre de 2009). Consultado el 23 de diciembre de 2009.
5. Jeff Hodges's homepage (http://kingsmountain.com/people/Jeff.Hodges/) (on-going). Consultado el 26 Aug
2011.
6. Collin Jackson's homepage (http://www.collinjackson.com/) (on-going). Consultado el 8 Mar 2011.
7. Adam Barth's homepage (http://www.adambarth.com/) (on-going). Consultado el 8 Mar 2011.

8. Strict Transport Security -05 (http://lists.w3.org/Archives/Public/www-archive/2009Sep/att-0051/draft-hodgesstrict-transport-sec-05.plain.html) (18 de septiembre de 2009). Consultado el 19 de noviembre de 2009.
9.
ForceHTTPS:
Protecting
High-Security
Web
Site
from
Network
Attacks
(https://crypto.stanford.edu/forcehttps/) (April 2008). Consultado el 19 de noviembre de 2009.
10. Hodges, Jeff; Steinguebl, Andy (29 de octubre de 2010). The Need for Coherent Web Security Policy
Framework(s)
(http://www.thesecuritypractice.com/the_security_practice/2010/10/the-need-for-coherent-websecurity-policy-frameworks.html). Consultado el 21 Nov 2012.
11.
Nations,
Daniel.
Web
Applications:
What
is
a
Web
Application?
(http://webtrends.about.com/od/webapplications/a/web_application.htm). About.com. Consultado el 21 Nov 2012.
12. Hodges, Jeff; Jackson, Collin; Barth, Adam (Nov 2012). Section 5. HSTS Mechanism Overview
(https://tools.ietf.org/html/rfc6797#section-5). RFC 6797. IETF. Consultado el 21 Nov 2012.
13. a b Hodges, Jeff; Jackson, Collin; Barth, Adam (Nov 2012). Section 2.3.1. Threats Addressed
(https://tools.ietf.org/html/rfc6797#section-2.3.1). RFC 6797. IETF. Consultado el 21 Nov 2012.
14. https://blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf
15. Strict Transport Security (http://www.chromium.org/sts). Consultado el 22 de marzo de 2011.
16.
Butcher,
Simon
(11
de
septiembre
de
2011).
HTTP
Strict
Transport
Security
(https://simon.butcher.name/archives/2011/09/11/HTTP-Strict-Transport-Security). Consultado el 27 de marzo de
2012.
17. Jeff Hodges (31 de octubre de 2010). Firesheep and HSTS (HTTP Strict Transport Security)
(http://identitymeme.org/archives/2010/10/29/firesheep-and-hsts-http-strict-transport-security/). Consultado el 8
Mar 2011.
18. Hodges, Jeff; Jackson, Collin; Barth, Adam (Nov 2012). Section 14.6. Bootstrap MITM Vulnerability
(https://tools.ietf.org/html/rfc6797#section-14.6). RFC 6797. IETF. Consultado el 21 Nov 2012.
19.
Adam
Langley
(8
de
julio
de
2010).
Strict
Transport
Security
(http://sites.google.com/a/chromium.org/dev/sts). Consultado el 22 de julio de 2010.
20. Hodges, Jeff; Jackson, Collin; Barth, Adam (Nov 2012). Section 14. Security Considerations
(https://tools.ietf.org/html/rfc6797#section-14). RFC 6797. IETF. Consultado el 21 Nov 2012.
21. Jeff Hodges (18 de septiembre de 2009). fyi: Strict Transport Security specification
(http://lists.w3.org/Archives/Public/public-webapps/2009JulSep/1148.html). Consultado el 19 de noviembre de
2009.
22. HTTP Strict Transport Security (https://blog.mozilla.org/security/2010/08/27/http-strict-transport-security/).
Mozilla. Consultado el 17 de marzo de 2011.
23. https://blog.mozilla.org/security/2012/11/01/preloading-hsts/
24. Opera Software ASA (23 de abril de 2012). Web specifications support in Opera Presto 2.10
(http://www.opera.com/docs/specs/presto2.10/#m210-244). Consultado el 8 de mayo de 2012.
25. Giorgio Maone (23 de septiembre de 2009). Strict Transport Security in NoScript
(http://hackademix.net/2009/09/23/strict-transport-security-in-noscript/). Consultado el 19 de noviembre de 2009.
26. Electronic Frontier Foundation (18 de junio de 2010). HTTPS Everywhere (https://www.eff.org/httpseverywhere). Consultado el 18 de junio de 2010.
27. Ristic, Ivan (29 July 2010). Internet SSL Survey 2010 v1.6 (http://blog.ivanristic.com/Qualys_SSL_LabsState_of_SSL_2010-v1.6.pdf) (PDF). Black Hat USA. p. 42. http://blog.ivanristic.com/Qualys_SSL_LabsState_of_SSL_2010-v1.6.pdf. Consultado el 19 August 2010.
28. The Chromium Developers (17 de noviembre de 2010). Strict Transport Security - The Chromium Projects
(http://dev.chromium.org/sts). Consultado el 17 de noviembre de 2010.
29. HTTP Strict Transport Security (HSTS), 7.2. HTTP Request Type (http://tools.ietf.org/html/draft-ietf-websecstrict-transport-sec-14#section-7.2) (29 de septiembre de 2012). Consultado el 12 de noviembre de 2012.

Notas
1. Estas conexiones seguras de HTTP se denotan por el URI de "https", y este protocolo se le suele llamar
coloquialmente como el "protocolo HTTPS". Tambin es conocido como HTTP Seguro.
2. El campo de encabezado de la respuesta HTTP definido en la especificacin HSTS sigue siendo llamado "Strict-

Transport-Security"

Enlaces externos
IETF WebSec Working Group (http://tools.ietf.org/wg/websec/charters)
W3C
Wiki
de
seguridad
web
Strict
Transport
(http://www.w3.org/Security/wiki/Strict_Transport_Security)
Security Now 262: Strict Transport Security (http://www.twit.tv/sn262) (en ingls)
Open
Web
Application
Security
Project
(OWASP):
HSTS
(https://www.owasp.org/index.php/HTTP_Strict_Transport_Security)

Security

description

Obtenido de http://es.wikipedia.org/w/index.php?title=HTTP_Strict_Transport_Security&oldid=65399342
Categoras: HTTP Seguridad informtica
Esta pgina fue modificada por ltima vez el 18 mar 2013, a las 05:28.
El texto est disponible bajo la Licencia Creative Commons Atribucin Compartir Igual 3.0; podran ser
aplicables clusulas adicionales. Lanse los trminos de uso para ms informacin.
Wikipedia es una marca registrada de la Fundacin Wikimedia, Inc., una organizacin sin nimo de lucro.

Vous aimerez peut-être aussi