DokuWiki

It's better when it's simple

User Tools

Site Tools


tips:httpslogin

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tips:httpslogin [2014-07-17 11:19] 118.208.247.16tips:httpslogin [2018-09-29 11:31] (current) – [Apache] added example of a simple rule for https for all pages bruno.genere
Line 5: Line 5:
 See https://www.dokuwiki.org/plugin:forcessllogin, doesn't seem to reflect SSL access in URL, i.e. dokuwiki's access denied page won't be opened via https protocol which makes debugging and assuring that you're securely logging in difficult. See https://www.dokuwiki.org/plugin:forcessllogin, doesn't seem to reflect SSL access in URL, i.e. dokuwiki's access denied page won't be opened via https protocol which makes debugging and assuring that you're securely logging in difficult.
 =====Apache===== =====Apache=====
-Using Apache's mod_rewrite, DokuWiki logins can be forced to use HTTPS, thus preventing clear text passwords on the wire.+Using Apache's mod_rewrite, DokuWiki logins can be forced to use HTTPS, thus preventing clear text passwords on the wire. 
  
-You may want to read up on [[:rewrite|general rewriting]] first.+You may also need that all requests (and not only login) use HTTPS. To do so, create an .htaccess file in the root directory of DokuWiki and insert the following code. 
 +<code apache .htaccess> 
 +RewriteCond %{HTTPS} !on 
 +RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L] 
 +</code>  
 + 
 +If you only want to force some specific URL, read up [[:rewrite|URL rewriting]] first.
  
 Redirection to a secured connection which is restricted to a certain set of pages (e.g. login pages) requires their recognition based on the URL. Some pages (e.g. "access denied" pages which might be included only in newer versions, e.g. 2014-05-05 "Ponder Stibbons" <ref>https://www.dokuwiki.org/plugin:ondeniedlogin</ref>) don't include such a mark and cannot be distungished from the rest of URLs (which one might want to be accessed without a secure connection in order to save server resources). Redirection to a secured connection which is restricted to a certain set of pages (e.g. login pages) requires their recognition based on the URL. Some pages (e.g. "access denied" pages which might be included only in newer versions, e.g. 2014-05-05 "Ponder Stibbons" <ref>https://www.dokuwiki.org/plugin:ondeniedlogin</ref>) don't include such a mark and cannot be distungished from the rest of URLs (which one might want to be accessed without a secure connection in order to save server resources).
  
-FIXME The rest of the paragraph only handles requests with a ''?do=login'' GET query which doesn't cover at least "access denied" pages! Research about a redirection rule for all authentification requests over HTTP is necessary.+FIXME The rest of the paragraph only handles requests with a ''?do=login'' GET query which doesn't cover at least "access denied" pages! Research about a redirection rule for all authentification requests over HTTP is necessary.\\   
 +See discussion for solution
  
 The following assumes you already set up HTTPS support for your wiki, making it available via HTTP and HTTPS on the same address. For performance reasons only the login and profile updates should be forced to HTTPS while all "normal" wiki actions will continue to work on HTTP. The following assumes you already set up HTTPS support for your wiki, making it available via HTTP and HTTPS on the same address. For performance reasons only the login and profile updates should be forced to HTTPS while all "normal" wiki actions will continue to work on HTTP.
Line 93: Line 100:
  
 Like with apache, you need to disable [[#securecookie|securecookie]] in your ''conf/dokuwiki.php'' Like with apache, you need to disable [[#securecookie|securecookie]] in your ''conf/dokuwiki.php''
 +
 +
 +===== php Based HTTPS =====
 +Below is useful if you wish to force https connection ALWAYS (not just for login), and wish not to rely on Apache or NGINX htaccess or other server specific directives.  Place below lines on top of the template file at '''...lib/tpl/template-name/main.php'''
 +
 +<code php>
 +<?php
 +if ($_SERVER[HTTPS]!="on") {
 +  //$strURIName=$_SERVER['SERVER_NAME'] . getenv("REQUEST_URI"); 
 +  // The function 'getenv' does not work if your Server API is ASAPI (IIS).
 +  // So, try to don't use getenv('REMOTE_ADDR'), but $_SERVER["REMOTE_ADDR"].
 +  $strURIName= $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
 +  header ("Location: https://$strURIName");
 +  // If it doesn't work for you and you need to troubleshoot your php code, 
 +  // uncomment below to find out about your particular server variables
 +  /*
 +  echo "<b>_SERVER Variables from $_SERVER</b><br><br>";
 +  reset($_SERVER);
 +  while (list ($key, $val) = each ($_SERVER)) {
 +  print $key . " = " . $val . "<br>";
 +  }
 +  */
 +}
 +
 +?>
 +</code>
 +
 +Thanks.. That saved my day!
 +
 +
 +
  
 ===== Discussion ===== ===== Discussion =====
Line 104: Line 142:
 I have created the solution to the “access denied” pages that enables rewrite rules to redirect the user to an SSL login page. I have created the solution to the “access denied” pages that enables rewrite rules to redirect the user to an SSL login page.
 This fix was an edit to the source code that redirects the user to the same page with the ‘do=login’ query string this enables the rewrite rules to take effect and redirect to an SSL login page, once the user logs in they will be presented with the page they tried to access. This fix is on my websites [[http://nofusscomputing.com/mantis/view.php?id=99 |‘bug and feature tracker’]] as a patch file.  Jon, [[http://nofusscomputing.com|No Fuss Computing.]] This fix was an edit to the source code that redirects the user to the same page with the ‘do=login’ query string this enables the rewrite rules to take effect and redirect to an SSL login page, once the user logs in they will be presented with the page they tried to access. This fix is on my websites [[http://nofusscomputing.com/mantis/view.php?id=99 |‘bug and feature tracker’]] as a patch file.  Jon, [[http://nofusscomputing.com|No Fuss Computing.]]
 +
 +==== 25 Nov 15 - wrong protocol service or infinite loop ====
 +
 +I try to CASsify my **Dokuwiki** with **phpCAS**. My CAS server does not allow http services (which I could change but it is not my purpose).\\
 +So I did install the plugin authplaincas with success and the phpCAS lib too. Evrything is OK except one thing : ''Client.php'' from phpCAS lib does not return the service to the CAS server with ''https'' but only with ''http''. I could made a trick which I post here :
 +https://github.com/Jasig/phpCAS/issues/178\\
 +First I was thinking **phpCAS** was the problem then it was **Dokuwiki** and then again **phpCAS** but now I think it is **DokuWiki** which report the wrong protocol service.
 + I tried different solution like rewrite engine into ''.htaccess'' but it leads to an infinite loop (I disabled secure cookie option).
 + For more information, I use an Apache2.4 Reverse proxy with permanent redirect 80 to 443 and a backend web with Apache2.4 with HTTP only.
 + I think the problem is HTTPS protocol information is not transmit to my backend which host my DokuWiki or when I get infinite loop I think my cookie is not preserve.
 + How can I fix it or debug it ? Help will be very appreciate.
 +
 +Regards,\\
 +Guy CARRÉ\\
 + guycarre at free dot fr
 +
 +**EDIT**
 +I found what it was wrong and I post it here :
 +https://github.com/Jasig/phpCAS/issues/178
 +
 + Good night ;-)
 +
 +==== 30 Nov 15 - do ====
 +Over HTTP, not logged on a inexistent page if you try to view source(do=edit), you'll "do=login" implicitly, over HTTP.
 +I suggest to switch to https on "do=(login|admin|profile|edit)".\\ 
 +Also, I'm not sure that this configuration really **needs** secure cookie disabled, it needs it **enabled** to me. Actually, steal a cookie is as easy as steal a cleartext password. Ok, it doesn't last as long, and isn't as powerful (or is it)..\\ 
 +Switching back to http, you loose session : abilities to edit, config etc, what's wrong with this? Doing such an action puts you back to https, the cookie is send and you retrieve your session. Maybe some other actions need to switch to https then like media things, etc, I don't know.\\ 
 +These are just suggestions, I do not master neither dokuwiki nor http(s)(server or protocol).
 +
 +==== 16 Feb 2016 - Use TLS all the time ====
 +
 +We should amend this tip to recommend using TLS for all connections.  Per the "30 Nov 15 - do" comment above, if you send the cookie insecurely for an active session, then it can be trivially stolen as the cookie going across the wire in the clear.  [[https://en.wikipedia.org/wiki/Firesheep|Firesheep]] makes this task automated and trivial to execute.  Further, [[https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Transport_Layer_Security|OWASP]] best practices are to run all secure all the time. Finally, we should recommend the 443 vhost send the [[https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security|HTTP Strict Transport Security (HSTS)]] header too.  This is done with a single line in the 443 vhost (for Apache in this example):
 +<code>Header always set Strict-Transport-Security "max-age=63072000; preload"</code>
 +
 +One step further would be to strongly recommend that TLS be configured by default.  Though this makes the install more technically challenging, having a default setup of sending login credentials in the clear is a bad idea.
  
  
tips/httpslogin.1405588765.txt.gz · Last modified: 2014-07-17 11:19 by 118.208.247.16 · Currently locked by: 69.172.232.4

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki