Deployment Guide
Table Of Contents
- Table of Contents
 - Preface
 - About Extreme Campus Controller Deployment
 - Configuring DHCP, NPS, and DNS Services
 - Centralized Site with a Captive Portal
 - Centralized Site with AAA Network
 - Deploying a Mesh Network
 - Configuring an External NAC Server for MBA and AAA Authentication
 - Manage RADIUS Servers for User Authentication
 - External Captive Portal on a Third-Party Server
 - Access Control Rule Admin Portal Access
 - Deploying Centralized Web Authentication
 - Deploying ExtremeCloud IQ - SE as an External Captive Portal
- Deployment Strategy
 - Configuring an External Captive Portal Network
 - Editing the Configuration Profile for Network and Roles
 - Extreme Campus Controller Default Pass-Through Rule
 - Adding Extreme Campus Controller as a Switch to ExtremeCloud IQ - Site Engine
 - Editing the Unregistered Policy on ExtremeCloud IQ - Site Engine
 - Editing the ExtremeCloud IQ - Site Engine Profile for Policy and Location-Based Services
 
 - Deploying an ExtremeGuest Captive Portal
 - Deploying Client Bridge
 - Deploying an Availability Pair
 - Deploying Universal APs
 - Extreme Campus Controller Pair with ExtremeLocation and AirDefense
 - ECP Local Authentication
 - PHP External Captive Portal, Controller’s Firewall Friendly API
 - Index
 
 const AWS4_ERROR_MISSING_QUERY_PARAMS=16;
 const AWS4_ERROR_MISSING_CRED_PARAMS=17;
 const AWS4_ERROR_STALE_REQUEST=2001;
 const AWS4_ERROR_UNKNOWN_IDENTITY=2002;
 const AWS4_EXTREME_REQUEST="aws4_request";
 const AWS4_MAX_URL_SIZE= 512;
 const AWS4_HTTP_REQ = "http://";
 const AWS4_HTTPS_REQ= "https://";
 const AWS4_MANDATORY_CRED_PARAMS = 4;
 /**
 * Method to verify the AWS signature based on given full URL address.
 *
 * @param string $pUrl
 * @param array $awsKeyPairs identity, shared secret key pairs
 * @return AWS error code
 */
 public static function verifyAwsUrlSignature($pUrl,
 $awsKeyPairs) {
 // Perform basic validation
 if($pUrl==NULL) {
 return self::AWS4_ERROR_NULL_INPUT;
 }
 if (2*self::AWS4_MAX_URL_SIZE < strlen($pUrl)) {
 return self::AWS4_ERROR_INPUT_URL_TOO_BIG;
 }
 if(stripos($pUrl, self::AWS4_HTTP_REQ)!=0 || stripos($pUrl, self::AWS4_HTTPS_REQ)!
=0) {
 return self::AWS4_ERROR_INVALID_PROTOCOL;
 }
 $urlParams = parse_url($pUrl); 
 if (!isset($urlParams['query'])) {
 return self::AWS4_ERROR_MISSING_QUERY;
 }
 $queryParams = explode("&", $urlParams['query']);
 foreach($queryParams AS $el) {
 $arr = explode("=", $el);
 $q[$arr[0]] = $arr[1];
 }
 $valResult = self::validateQueryParms($q);
 if (self::AWS4_ERROR_NONE != $valResult) {
 return $valResult;
 }
 // Done with the basic validations.
 $date = $q['X-Amz-Date'];
 $sign = $q['X-Amz-Signature'];
 $credentVal = rawurldecode($q['X-Amz-Credential']);
 ksort($q);
 // Remove the signature from the list of parameters over
 // which the signature will be recomputed.
 unset($q['X-Amz-Signature']);
 $credentAttrs = explode("/", $credentVal);
 $pKey = $credentAttrs[0];
 if (self::AWS4_MAX_URL_SIZE < strlen($pKey)) {
 return self::AWS4_ERROR_INPUT_KEY_TOO_BIG;
 }
 if(self::AWS4_MANDATORY_CRED_PARAMS > count($credentAttrs)) {
 return self::AWS4_ERROR_MISSING_CRED_PARAMS;
 }
 if (!isset($awsKeyPairs[$pKey])) {
 return self::AWS4_ERROR_UNKNOWN_IDENTITY;
 }
 $scope = $credentAttrs[1]."/".$credentAttrs[2]."/"
 .$credentAttrs[3]."/".$credentAttrs[4];
 $port = $urlParams['port'];
crypt_aws_s4.php
PHP External Captive Portal, Controller’s Firewall
Friendly API
208 Extreme Campus Controller Deployment Guide for version 5.46.03










