X-Cart:Configuring HTTPS

From X-Cart 4 Classic
Jump to: navigation, search

Firstly, you should obtain an SSL certificate and have it properly installed and configured on your web server.

The majority of hosting companies help their customers to purchase SSL certificates or provide their own Shared SSL URLs. If your hosting company doesn't render such services, you will need to purchase a certificate on your own.

We will be glad to assist you with this issue. You can purchase SSL certificates from our company. We sell SSL certificates provided by the world's leading Certification Authority, Comodo Group. For details, conditions and prices, please see http://www.x-cart.com/ssl/.

If you are on a dedicated server, we can offer you our service on analyzing and configuring your server and/or install the SSL Certificate on it. Please note: we will need the 'root' access to your server over SSH or the 'Administrator' access over MS Remote Access Desktop to complete these tasks.

Secondly, once you have the SSL certificate installed and configured, you should configure the HTTPS server in X-Cart. To do it, modify the <xcart_dir>/config.php file and set the $xcart_https_host variable properly:

/**
* X-Cart HTTP & HTTPS host and web directory
*
* This section defines the location of your X-Cart installation. If X-Cart is
* installed using Web installation, the variables of this section are
* configured via the Installation Wizard. If you install X-Cart manually, use
* this section to provide your web server details manually.
*
* $xcart_http_host - Host name of the server on which your X-Cart software is
* to be installed;
* $xcart_https_host - Host name of the secure server that will provide access
* to your X-Cart-based store via the HTTPS protocol;
* $xcart_web_dir - X-Cart web directory.
*
* NOTE:
* The variables $xcart_http_host and $xcart_https_host must contain hostnames
* ONLY (no http:// or https:// prefixes, no trailing slashes).
*
* Web dir is the directory where your X-Cart is installed as seen from the Web,
* not the file system.
*
* Web dir must start with a slash and have no slash at the end. An exception to
* this rule is when you install X-Cart in the site root, in which case you need
* to leave the variable empty.
*
* EXAMPLE 1:
* $xcart_http_host ="www.yourhost.com";
* $xcart_https_host ="www.securedirectories.com/yourhost.com";
* $xcart_web_dir ="/xcart";
* will result in the following URLs:
* http://www.yourhost.com/xcart
* https://www.securedirectories.com/yourhost.com/xcart
*
* EXAMPLE 2:
* $xcart_http_host ="www.yourhost.com";
* $xcart_https_host ="www.yourhost.com";
* $xcart_web_dir ="";
* will result in the following URLs:
* http://www.yourhost.com/
* https://www.yourhost.com/
*/

Finally, enable the secure checkout at your store by selecting the HTTPS protocol for the payment methods to be secure on the Payment Methods page. You can also adjust these HTTPS options on the 'General settings/Security options' page:

Optionally, if you need secure certain php scripts you should add https scripts to <xcart_dir>/https.php file, 'https_scripts' array. You can find some examples in <xcart_dir>/https.php file:

$https_scripts[] = 'login.php';
$https_scripts[] = array(
'cart.php',
"mode=checkout",
);

Optionally, if you want to switch the whole x-cart to secure mode edit https.php file. Find the line

function is_https_link($link, $https_scripts) {

and replace it with

function is_https_link($link, $https_scripts) {
return true;

Now, if your web server does not use SSL certificates, and you are running an HTTPS Proxy instead, you may need to make additional settings to enable your X-Cart work over SSL (secure connection). In the include/https_detect.php file, define the proxy IP address and set the $HTTPS variable to 'true':

if ($_SERVER['REMOTE_ADDR'] == '192.160.1.1') {
$HTTPS_RELAY = true;
$HTTPS = true;
}

If you are not sure whether your web server uses SSL certificates or runs behind an HTTPS Proxy, contact your hosting service provider or server administrator or email our technical support - we will help you find that out.

If you experience problems with external services (payment / shipping) working over https while using curl/libcurl as the https module, try adding the following line to top.inc.php:

define('USE_CURLOPT_SSL_VERIFYPEER', 1);

after

$xcart_dir = rtrim(realpath($xcart_dir), XC_DS);