[edk2] [Patch 5/6] NetworkPkg: HTTPS support over IPv4 and IPv6
This patch is used to enable HTTPS feature. HttpDxe driver will consume TlsDxe driver. It can both support http and https feature, it’s depended on the information in URL, the HTTP instance can be able to determine whether to use http or https. Cc: Ye Ting Cc: Fu Siyuan Cc: Long Qin Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiaxin Wu --- NetworkPkg/HttpDxe/HttpDriver.h |7 +- NetworkPkg/HttpDxe/HttpDxe.inf|8 +- NetworkPkg/HttpDxe/HttpImpl.c | 188 - NetworkPkg/HttpDxe/HttpProto.c| 395 ++--- NetworkPkg/HttpDxe/HttpProto.h| 65 +- NetworkPkg/HttpDxe/HttpsSupport.c | 1680 + NetworkPkg/HttpDxe/HttpsSupport.h | 314 +++ 7 files changed, 2520 insertions(+), 137 deletions(-) create mode 100644 NetworkPkg/HttpDxe/HttpsSupport.c create mode 100644 NetworkPkg/HttpDxe/HttpsSupport.h diff --git a/NetworkPkg/HttpDxe/HttpDriver.h b/NetworkPkg/HttpDxe/HttpDriver.h index 138f56c..d2a6ae5 100644 --- a/NetworkPkg/HttpDxe/HttpDriver.h +++ b/NetworkPkg/HttpDxe/HttpDriver.h @@ -1,9 +1,9 @@ /** @file The header files of the driver binding and service binding protocol for HttpDxe driver. - Copyright (c) 2015, Intel Corporation. All rights reserved. + Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php. @@ -20,10 +20,11 @@ // // Libraries // #include +#include #include #include #include #include #include @@ -46,11 +47,12 @@ #include #include #include #include #include - +#include +#include // // Produced Protocols // #include @@ -75,10 +77,11 @@ extern EFI_HTTP_UTILITIES_PROTOCOL *mHttpUtilities; // Include files with function prototypes // #include "ComponentName.h" #include "HttpImpl.h" #include "HttpProto.h" +#include "HttpsSupport.h" #include "HttpDns.h" typedef struct { EFI_SERVICE_BINDING_PROTOCOL *ServiceBinding; UINTN NumberOfChildren; diff --git a/NetworkPkg/HttpDxe/HttpDxe.inf b/NetworkPkg/HttpDxe/HttpDxe.inf index bf2cbee..a228c3d 100644 --- a/NetworkPkg/HttpDxe/HttpDxe.inf +++ b/NetworkPkg/HttpDxe/HttpDxe.inf @@ -1,9 +1,9 @@ ## @file # Implementation of EFI HTTP protocol interfaces. # -# Copyright (c) 2015, Intel Corporation. All rights reserved. +# Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved. # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at # http://opensource.org/licenses/bsd-license.php. @@ -36,14 +36,17 @@ HttpDriver.c HttpImpl.h HttpImpl.c HttpProto.h HttpProto.c + HttpsSupport.h + HttpsSupport.c [LibraryClasses] UefiDriverEntryPoint UefiBootServicesTableLib + UefiRuntimeServicesTableLib MemoryAllocationLib BaseLib UefiLib DebugLib NetLib @@ -62,8 +65,11 @@ gEfiDns4ProtocolGuid ## SOMETIMES_CONSUMES gEfiDns6ServiceBindingProtocolGuid ## SOMETIMES_CONSUMES gEfiDns6ProtocolGuid ## SOMETIMES_CONSUMES gEfiIp4Config2ProtocolGuid ## SOMETIMES_CONSUMES gEfiIp6ConfigProtocolGuid## SOMETIMES_CONSUMES + gEfiTlsServiceBindingProtocolGuid## SOMETIMES_CONSUMES + gEfiTlsProtocolGuid ## SOMETIMES_CONSUMES + gEfiTlsConfigurationProtocolGuid ## SOMETIMES_CONSUMES [UserExtensions.TianoCore."ExtraFiles"] HttpDxeExtra.uni \ No newline at end of file diff --git a/NetworkPkg/HttpDxe/HttpImpl.c b/NetworkPkg/HttpDxe/HttpImpl.c index a068cfb..8632226 100644 --- a/NetworkPkg/HttpDxe/HttpImpl.c +++ b/NetworkPkg/HttpDxe/HttpImpl.c @@ -238,10 +238,11 @@ EfiHttpRequest ( CHAR8 *HostName; UINT16RemotePort; HTTP_PROTOCOL *HttpInstance; BOOLEAN Configure; BOOLEAN ReConfigure; + BOOLEAN TlsConfigure; CHAR8 *RequestStr; CHAR8 *Url; UINTN UrlLen; CHAR16*HostNameStr; HTTP_TOKEN_WRAP *Wrap; @@ -306,10 +307,38 @@ EfiHttpRequest ( HttpInstance->Url = Url; } UnicodeStrToAsciiStr (Request->Url, Url); + + // + // From the information in Url, the HTTP instance will + // be able to determine whether to use http or https. + // + HttpInstance->UseHttps = IsHttpsUrl (Url); + + TlsConfigure = FALSE; + + // + // Check whether we need to create
Re: [edk2] [Patch 5/6] NetworkPkg: HTTPS support over IPv4 and IPv6
I have finally got some time to go over this with others from HPE. We have a concern that TlsCaCertificate is currently limited to one certificate. That is not practical for clients like HTTPs Boot. Supporting configuring multiple trusted certs is necessary. Can the variable instead be formatted similar to DB to allow multiple certificates? -Original Message- From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Jiaxin Wu Sent: Wednesday, February 24, 2016 2:15 AM To: edk2-devel@lists.01.org Cc: Ye Ting ; Fu Siyuan ; Long Qin Subject: [edk2] [Patch 5/6] NetworkPkg: HTTPS support over IPv4 and IPv6 This patch is used to enable HTTPS feature. HttpDxe driver will consume TlsDxe driver. It can both support http and https feature, it’s depended on the information in URL, the HTTP instance can be able to determine whether to use http or https. Cc: Ye Ting Cc: Fu Siyuan Cc: Long Qin Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiaxin Wu --- NetworkPkg/HttpDxe/HttpDriver.h |7 +- NetworkPkg/HttpDxe/HttpDxe.inf|8 +- NetworkPkg/HttpDxe/HttpImpl.c | 188 - NetworkPkg/HttpDxe/HttpProto.c| 395 ++--- NetworkPkg/HttpDxe/HttpProto.h| 65 +- NetworkPkg/HttpDxe/HttpsSupport.c | 1680 + NetworkPkg/HttpDxe/HttpsSupport.h | 314 +++ 7 files changed, 2520 insertions(+), 137 deletions(-) create mode 100644 NetworkPkg/HttpDxe/HttpsSupport.c create mode 100644 NetworkPkg/HttpDxe/HttpsSupport.h diff --git a/NetworkPkg/HttpDxe/HttpDriver.h b/NetworkPkg/HttpDxe/HttpDriver.h index 138f56c..d2a6ae5 100644 --- a/NetworkPkg/HttpDxe/HttpDriver.h +++ b/NetworkPkg/HttpDxe/HttpDriver.h @@ -1,9 +1,9 @@ /** @file The header files of the driver binding and service binding protocol for HttpDxe driver. - Copyright (c) 2015, Intel Corporation. All rights reserved. + Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php. @@ -20,10 +20,11 @@ // // Libraries // #include +#include #include #include #include #include #include @@ -46,11 +47,12 @@ #include #include #include #include #include - +#include +#include // // Produced Protocols // #include @@ -75,10 +77,11 @@ extern EFI_HTTP_UTILITIES_PROTOCOL *mHttpUtilities; // Include files with function prototypes // #include "ComponentName.h" #include "HttpImpl.h" #include "HttpProto.h" +#include "HttpsSupport.h" #include "HttpDns.h" typedef struct { EFI_SERVICE_BINDING_PROTOCOL *ServiceBinding; UINTN NumberOfChildren; diff --git a/NetworkPkg/HttpDxe/HttpDxe.inf b/NetworkPkg/HttpDxe/HttpDxe.inf index bf2cbee..a228c3d 100644 --- a/NetworkPkg/HttpDxe/HttpDxe.inf +++ b/NetworkPkg/HttpDxe/HttpDxe.inf @@ -1,9 +1,9 @@ ## @file # Implementation of EFI HTTP protocol interfaces. # -# Copyright (c) 2015, Intel Corporation. All rights reserved. +# Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved. # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at # http://opensource.org/licenses/bsd-license.php. @@ -36,14 +36,17 @@ HttpDriver.c HttpImpl.h HttpImpl.c HttpProto.h HttpProto.c + HttpsSupport.h + HttpsSupport.c [LibraryClasses] UefiDriverEntryPoint UefiBootServicesTableLib + UefiRuntimeServicesTableLib MemoryAllocationLib BaseLib UefiLib DebugLib NetLib @@ -62,8 +65,11 @@ gEfiDns4ProtocolGuid ## SOMETIMES_CONSUMES gEfiDns6ServiceBindingProtocolGuid ## SOMETIMES_CONSUMES gEfiDns6ProtocolGuid ## SOMETIMES_CONSUMES gEfiIp4Config2ProtocolGuid ## SOMETIMES_CONSUMES gEfiIp6ConfigProtocolGuid## SOMETIMES_CONSUMES + gEfiTlsServiceBindingProtocolGuid## SOMETIMES_CONSUMES + gEfiTlsProtocolGuid ## SOMETIMES_CONSUMES + gEfiTlsConfigurationProtocolGuid ## SOMETIMES_CONSUMES [UserExtensions.TianoCore."ExtraFiles"] HttpDxeExtra.uni \ No newline at end of file diff --git a/NetworkPkg/HttpDxe/HttpImpl.c b/NetworkPkg/HttpDxe/HttpImpl.c index a068cfb..8632226 100644 --- a/NetworkPkg/HttpDxe/HttpImpl.c +++ b/NetworkPkg/HttpDxe/HttpImpl.c @@ -238,10 +238,11 @@ EfiHttpRequest ( CHAR8 *HostName; UINT16RemotePort; HTTP_PROTOCOL *HttpInst