HowTo:SSL-Proxy: Unterschied zwischen den Versionen

Aus WEB-Shop Software Wiki
Zur Navigation springenZur Suche springen
 
(20 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<font style="font-size: xx-large;">Status der Information: unfertig</font>
+
= Problem =
 +
Du möchtest deinen Webshop über https für die Kunden erreichbar machen und dein Provider bietet dir einen so genannten SSL-Proxy an. Das sieht dann in der Regel so aus. Dein Shop läuft z.B. unter <nowiki>www.deinShop.tld</nowiki>. Dein Provider nennt dir dafür die folgende SSL-Proxy url: <nowiki>http://www.ssl-proxy.tld/www.deinShop.tld</nowiki>
  
Du möchtest deinen Webshop über https für die Kunden erreichbar machen und dein Provider bietet dir einen so genannten SSL-Proxy an. Damit dies problemlos funktioniert müssen '''alle''' Seiten via SSL-Proxy abgerufen werden, selbst die Bilder-Links.
+
Zunächst könnte man meinen - na da schreibe ich doch die Config so um das alles über den proxy geroutet wird - aber das ist ein '''SEO-GAU''', da über diesen ja auch andere Shops gehen und alle dann unter der geleichen Domain die Produkte anzeigen - daran sollest Du also nichtmal im Schlaf denken. Auch von einer Änderung in der .htaccess kann man nur abraten.
 +
 
 +
= Zweiter Versuch =
 +
<font style="font-size: xx-large;">Status der Information: Läuft bei mehreren Usern</font>
 +
 
 +
Hier nun der zweite Versuch die URLS bei den SSL-Proxy usern hinzubekomen...
 +
 
 +
Passe folgende Daten in der /includes/configure.php Datei an, hierbei werden alle SERVER als https angegeben:
 +
define('HTTP_SERVER', '<nowiki>http://www.deinShop.tld</nowiki>'); # Der "normale" Zugriff auf den Shop
 +
define('HTTPS_SERVER', '<nowiki>https://ssl-proxy.tld/www.deinShop.tld</nowiki>');  # was da genau rein muß sagt dir dein Provider
 +
define('ENABLE_SSL', true); # hier als boolscher Wert ohne Anführungszeichen!!!
 +
 
 +
Anpassungen in der /admin/includes/configure.php:
 +
define('HTTP_SERVER', '<nowiki>http://www.deinShop.de</nowiki>') # Zugriff auf das Admin-Backend ohne HTTPS!!!
 +
define('HTTP_CATALOG_SERVER', '<nowiki>http://www.deinShop.de</nowiki>');  # normaler zugriff auf den Shop!!!
 +
define('HTTPS_CATALOG_SERVER', '<nowiki>https://ssl-proxy.tld/www.deinShop.de</nowiki>');  # das was der Provider genannt hat
 +
 
 +
Folgende Änderungen im Core musst Du vornehmen wenn Du eine Version <= 1.0.3a einsetzt:
 +
Die Änderungen die Du bereits beim ersten Versuch gemacht hast bleiben drin, zusätzlich nun folgendes ändern!
 +
;includes/application_top.php
 +
:Lösche den Block
 +
::<code>// set the type of request (secure or not)</code>
 +
::<code>$request_type = (getenv('HTTPS') == '1' || getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';</code>
 +
:und füge unterhalb von
 +
::<code>// set the top level domains</code>
 +
::<code>$http_domain = xtc_get_top_level_domain(HTTP_SERVER);</code>
 +
::<code>$https_domain = xtc_get_top_level_domain(HTTPS_SERVER);</code>
 +
:diese Zeilen ein
 +
::<code>// set the type of request (secure or not), include ssl-proxy check</code>
 +
::<code>if ($http_domain != $https_domain) {</code>
 +
:::<code>$request_type = ($https_domain == (isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']) ? 'SSL' : 'NONSSL');</code>
 +
::<code>} else {</code>
 +
:::<code>$request_type = (getenv('HTTPS') == '1' || getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';</code>
 +
::<code>}</code>
 +
----
 +
:Suche folgenden Code
 +
::<code>if (isset ($_REQUEST[session_name()])) {</code>
 +
:::<code>session_id($_REQUEST[session_name()]);</code>
 +
::<code>}</code>
 +
:und ersetzt diesen durch
 +
::<code>if (isset($_POST[session_name()]) and !empty($_POST[session_name()])) {</code>
 +
:::<code>session_id($_POST[session_name()]);</code>
 +
::<code>} elseif (isset($_GET[session_name()]) and !empty($_GET[session_name()])) {</code>
 +
:::<code>session_id($_GET[session_name()]);</code>
 +
::<code>}</code>
 +
 
 +
 
 +
Diese Änderungen fürten nun dazu das die SID (XTCid) in allen Links auftauchen.
 +
Das liegt nun daran daß die PHP-Funktion [http://php.net/session-start session_start()] die Konstante '''SID''' definiert.
 +
Daher wurde im Testshop noch die folgende Datei angepaßt:
 +
 
 +
;inc/xtc_href_link_directurl.inc.php
 +
:Suche
 +
::<code>if ( defined('SID') && xtc_not_null(SID) ) {</code>
 +
:::<code>$sid = SID;</code>
 +
::<code>} elseif ( ($request_type == 'NONSSL' && $connection == 'SSL' && ENABLE_SSL == true)</code>
 +
 
 +
:und mache daraus
 +
::<code>/* if ( defined('SID') && xtc_not_null(SID) ) {</code>
 +
:::<code>$sid = SID;</code>
 +
::<code>} else */</code>
 +
::<code>if ( ($request_type == 'NONSSL' && $connection == 'SSL' && ENABLE_SSL == true)</code>
 +
 
 +
eine identische Stelle gibt es in der Datei
 +
;inc/xtc_href_link_shopstat.inc.php
 +
 
 +
Derzeit wird noch untersuche warum diese Stelle zuvor kein Problem darstellte.
 +
 
 +
= Erster Versuch - '''gescheitert da SEO-GAU''' =
 +
----
 +
 
 +
'''UPDATE: Wenn der gesamte Shop (bis auf die Startseite) unter der Domain des Providers läuft, ist das ein "SEO-GAU" für den Shop. Bis zu einer tragfähigen Lösung sollte die 1.0.3(a) nicht für einen Shop mit SSL-Proxy eingesetz werden.'''
 +
 
 +
----
 +
 
 +
<del>Damit dies problemlos funktioniert müssen '''alle''' Seiten via SSL-Proxy abgerufen werden, selbst die Bilder-Links.
  
 
Recht einfach sollte das realisierbar sein durch einen entsprechenden redirekt in der /.htaccess vom Shop, hierfür sind folgende Zeilen in die Datei einzufügen:
 
Recht einfach sollte das realisierbar sein durch einen entsprechenden redirekt in der /.htaccess vom Shop, hierfür sind folgende Zeilen in die Datei einzufügen:
 
  # Diese Variante ist ungeeignet, da hierdurch die Client-Brower für jedes Objekt zwei anfragen stellen müssen.
 
  # Diese Variante ist ungeeignet, da hierdurch die Client-Brower für jedes Objekt zwei anfragen stellen müssen.
 
  # Der Redirect würde jede anfrage somit unnötig verlangsamen...
 
  # Der Redirect würde jede anfrage somit unnötig verlangsamen...
 +
 +
Dein Provider nennt Dir für deinen Shop <nowiki>www.deinShop.tld</nowiki> die SSL-Proxy Adresse <nowiki>https://ssl-proxy.tld/www.deinShop.tld</nowiki>
 +
Diese URL besteht aus zwei bestandteilen (SERVER: ssl-proxy.tld und dem PFAD: www.deinShop.tld)
  
 
Passe folgende Daten in der /includes/configure.php Datei an, hierbei werden alle SERVER als https angegeben:
 
Passe folgende Daten in der /includes/configure.php Datei an, hierbei werden alle SERVER als https angegeben:
  <nowiki>define('HTTP_SERVER', 'https://ssl-proxy.tld/www.deinShop.tld'); # auch hier: https!!!
+
  define('HTTP_SERVER', '<nowiki>https://ssl-proxy.tld</nowiki>'); # auch hier: https!!!
define('HTTPS_SERVER', 'https://ssl-proxy.tld/www.deinShop.tld');  # was da genau rein muß sagt dir dein Provider
+
define('HTTPS_SERVER', '<nowiki>https://ssl-proxy.tld</nowiki>');  # was da genau rein muß sagt dir dein Provider
define('ENABLE_SSL', true); # hier als boolscher Wert ohne Anführungszeichen!!!
+
define('ENABLE_SSL', true); # hier als boolscher Wert ohne Anführungszeichen!!!
define('ENABLE_SSL_CATALOG', 'true'); # hier mit Anführungszeichen - das muß so sein!</nowiki>
+
define('ENABLE_SSL_CATALOG', 'true'); # hier mit Anführungszeichen - das muß so sein!</nowiki>
 +
define('DIR_WS_CATALOG', '/www.deinShop.de/'); // absolute path required
 +
Wenn Dein Shop im Hauptverzeichnis läuft so wars das, ansonsten mußt Du die Definition von DIR_WS_CATALOG entsprechend erweitern, z.B.:
 +
define('DIR_WS_CATALOG', '/www.deinShop.de/'''ecb'''/'); // absolute path required
  
 
Anpassungen in der /admin/includes/configure.php:
 
Anpassungen in der /admin/includes/configure.php:
  <nowiki>define('HTTP_SERVER', 'https://ssl-proxy.tld/www.deinShop.tld') # HTTPS!!! was da genau rein muß sagt dir dein Provider
+
  define('HTTP_SERVER', '<nowiki>https://ssl-proxy.tld</nowiki>') # HTTPS!!! was da genau rein muß sagt dir dein Provider
define('HTTP_CATALOG_SERVER', 'https://ssl-proxy.tld/www.deinShop.tld');  # HTTPS!!!
+
define('HTTP_CATALOG_SERVER', '<nowiki>https://ssl-proxy.tld</nowiki>');  # HTTPS!!!
define('HTTPS_CATALOG_SERVER', 'https://ssl-proxy.tld/www.deinShop.tld');  # HTTPS!!!
+
define('HTTPS_CATALOG_SERVER', '<nowiki>https://ssl-proxy.tld</nowiki>');  # HTTPS!!!
define('ENABLE_SSL_CATALOG', 'true'); # hier mit Anführungszeichen - das muß so sein!</nowiki>
+
define('ENABLE_SSL_CATALOG', 'true'); # hier mit Anführungszeichen - das muß so sein!
 +
define('DIR_WS_ADMIN', '/www.deinShop.de/admin/'); // absolute path required
 +
define('DIR_WS_CATALOG', '/www.deinShop.de/'); // absolute path required
 +
DIR_WS_ADMIN und DIR_WS_CATALOG muß bei Shops in Unterverzeichnissen natürlich wieder entsprechend angepasst werden!
 +
</del>
 +
 
 +
Änderungen im Core wenn Du eine Version <= V1.0.3a benutzt:
 +
;includes/application_top.inc
 +
:suche
 +
::<code>$breadcrumb->add(HEADER_TITLE_TOP, HTTP_SERVER.$breadcrumbSID);</code>
 +
:mache daraus
 +
::<code>$breadcrumb->add(HEADER_TITLE_TOP, HTTP_SERVER.DIR_WS_CATALOG.$breadcrumbSID);</code>
 +
 
 +
<del>
 +
;includes/modules/product_listing.php
 +
:suche
 +
::<code>$module_smarty -> assign('products_sort_file', $_SERVER['REQUEST_URI']);</code>
 +
:mache daraus
 +
::<code>$module_smarty -> assign('products_sort_file', (strpos($_SERVER['REQUEST_URI'], DIR_WS_CATALOG) === false ? DIR_WS_CATALOG : NULL).$_SERVER['REQUEST_URI']);</code>
 +
</del>
 +
 
 +
 
 +
 
 +
 
 +
Weitere [[HowTo|HowTo's]]...

Aktuelle Version vom 19. August 2009, 22:12 Uhr

Problem

Du möchtest deinen Webshop über https für die Kunden erreichbar machen und dein Provider bietet dir einen so genannten SSL-Proxy an. Das sieht dann in der Regel so aus. Dein Shop läuft z.B. unter www.deinShop.tld. Dein Provider nennt dir dafür die folgende SSL-Proxy url: http://www.ssl-proxy.tld/www.deinShop.tld

Zunächst könnte man meinen - na da schreibe ich doch die Config so um das alles über den proxy geroutet wird - aber das ist ein SEO-GAU, da über diesen ja auch andere Shops gehen und alle dann unter der geleichen Domain die Produkte anzeigen - daran sollest Du also nichtmal im Schlaf denken. Auch von einer Änderung in der .htaccess kann man nur abraten.

Zweiter Versuch

Status der Information: Läuft bei mehreren Usern

Hier nun der zweite Versuch die URLS bei den SSL-Proxy usern hinzubekomen...

Passe folgende Daten in der /includes/configure.php Datei an, hierbei werden alle SERVER als https angegeben:

define('HTTP_SERVER', 'http://www.deinShop.tld'); # Der "normale" Zugriff auf den Shop
define('HTTPS_SERVER', 'https://ssl-proxy.tld/www.deinShop.tld');  # was da genau rein muß sagt dir dein Provider
define('ENABLE_SSL', true); # hier als boolscher Wert ohne Anführungszeichen!!!

Anpassungen in der /admin/includes/configure.php:

define('HTTP_SERVER', 'http://www.deinShop.de') # Zugriff auf das Admin-Backend ohne HTTPS!!!
define('HTTP_CATALOG_SERVER', 'http://www.deinShop.de');  # normaler zugriff auf den Shop!!!
define('HTTPS_CATALOG_SERVER', 'https://ssl-proxy.tld/www.deinShop.de');  # das was der Provider genannt hat

Folgende Änderungen im Core musst Du vornehmen wenn Du eine Version <= 1.0.3a einsetzt: Die Änderungen die Du bereits beim ersten Versuch gemacht hast bleiben drin, zusätzlich nun folgendes ändern!

includes/application_top.php
Lösche den Block
// set the type of request (secure or not)
$request_type = (getenv('HTTPS') == '1' || getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';
und füge unterhalb von
// set the top level domains
$http_domain = xtc_get_top_level_domain(HTTP_SERVER);
$https_domain = xtc_get_top_level_domain(HTTPS_SERVER);
diese Zeilen ein
// set the type of request (secure or not), include ssl-proxy check
if ($http_domain != $https_domain) {
$request_type = ($https_domain == (isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']) ? 'SSL' : 'NONSSL');
} else {
$request_type = (getenv('HTTPS') == '1' || getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';
}

Suche folgenden Code
if (isset ($_REQUEST[session_name()])) {
session_id($_REQUEST[session_name()]);
}
und ersetzt diesen durch
if (isset($_POST[session_name()]) and !empty($_POST[session_name()])) {
session_id($_POST[session_name()]);
} elseif (isset($_GET[session_name()]) and !empty($_GET[session_name()])) {
session_id($_GET[session_name()]);
}


Diese Änderungen fürten nun dazu das die SID (XTCid) in allen Links auftauchen. Das liegt nun daran daß die PHP-Funktion session_start() die Konstante SID definiert. Daher wurde im Testshop noch die folgende Datei angepaßt:

inc/xtc_href_link_directurl.inc.php
Suche
if ( defined('SID') && xtc_not_null(SID) ) {
$sid = SID;
} elseif ( ($request_type == 'NONSSL' && $connection == 'SSL' && ENABLE_SSL == true)
und mache daraus
/* if ( defined('SID') && xtc_not_null(SID) ) {
$sid = SID;
} else */
if ( ($request_type == 'NONSSL' && $connection == 'SSL' && ENABLE_SSL == true)

eine identische Stelle gibt es in der Datei

inc/xtc_href_link_shopstat.inc.php

Derzeit wird noch untersuche warum diese Stelle zuvor kein Problem darstellte.

Erster Versuch - gescheitert da SEO-GAU


UPDATE: Wenn der gesamte Shop (bis auf die Startseite) unter der Domain des Providers läuft, ist das ein "SEO-GAU" für den Shop. Bis zu einer tragfähigen Lösung sollte die 1.0.3(a) nicht für einen Shop mit SSL-Proxy eingesetz werden.


Damit dies problemlos funktioniert müssen alle Seiten via SSL-Proxy abgerufen werden, selbst die Bilder-Links.

Recht einfach sollte das realisierbar sein durch einen entsprechenden redirekt in der /.htaccess vom Shop, hierfür sind folgende Zeilen in die Datei einzufügen:

# Diese Variante ist ungeeignet, da hierdurch die Client-Brower für jedes Objekt zwei anfragen stellen müssen.
# Der Redirect würde jede anfrage somit unnötig verlangsamen...

Dein Provider nennt Dir für deinen Shop www.deinShop.tld die SSL-Proxy Adresse https://ssl-proxy.tld/www.deinShop.tld Diese URL besteht aus zwei bestandteilen (SERVER: ssl-proxy.tld und dem PFAD: www.deinShop.tld)

Passe folgende Daten in der /includes/configure.php Datei an, hierbei werden alle SERVER als https angegeben:

define('HTTP_SERVER', 'https://ssl-proxy.tld'); # auch hier: https!!!
define('HTTPS_SERVER', 'https://ssl-proxy.tld');  # was da genau rein muß sagt dir dein Provider
define('ENABLE_SSL', true); # hier als boolscher Wert ohne Anführungszeichen!!!
define('ENABLE_SSL_CATALOG', 'true'); # hier mit Anführungszeichen - das muß so sein!</nowiki>
define('DIR_WS_CATALOG', '/www.deinShop.de/'); // absolute path required

Wenn Dein Shop im Hauptverzeichnis läuft so wars das, ansonsten mußt Du die Definition von DIR_WS_CATALOG entsprechend erweitern, z.B.:

define('DIR_WS_CATALOG', '/www.deinShop.de/ecb/'); // absolute path required

Anpassungen in der /admin/includes/configure.php:

define('HTTP_SERVER', 'https://ssl-proxy.tld') # HTTPS!!! was da genau rein muß sagt dir dein Provider
define('HTTP_CATALOG_SERVER', 'https://ssl-proxy.tld');  # HTTPS!!!
define('HTTPS_CATALOG_SERVER', 'https://ssl-proxy.tld');  # HTTPS!!!
define('ENABLE_SSL_CATALOG', 'true'); # hier mit Anführungszeichen - das muß so sein!
define('DIR_WS_ADMIN', '/www.deinShop.de/admin/'); // absolute path required
define('DIR_WS_CATALOG', '/www.deinShop.de/'); // absolute path required

DIR_WS_ADMIN und DIR_WS_CATALOG muß bei Shops in Unterverzeichnissen natürlich wieder entsprechend angepasst werden!

Änderungen im Core wenn Du eine Version <= V1.0.3a benutzt:

includes/application_top.inc
suche
$breadcrumb->add(HEADER_TITLE_TOP, HTTP_SERVER.$breadcrumbSID);
mache daraus
$breadcrumb->add(HEADER_TITLE_TOP, HTTP_SERVER.DIR_WS_CATALOG.$breadcrumbSID);

includes/modules/product_listing.php
suche
$module_smarty -> assign('products_sort_file', $_SERVER['REQUEST_URI']);
mache daraus
$module_smarty -> assign('products_sort_file', (strpos($_SERVER['REQUEST_URI'], DIR_WS_CATALOG) === false ? DIR_WS_CATALOG : NULL).$_SERVER['REQUEST_URI']);



Weitere HowTo's...