Security¶
HTTPS¶
If your application is accessed in HTTPS, you have to make sure that all URLs generated by the application (CSS and JavaScript files, images, MapServer requests, etc.) use the HTTPS scheme as well. Otherwise the browser will prompt “insecure content” warnings.
There are two ways to manage this:
application behind a proxy
application and SSL certificate on the same server
Application behind a proxy¶
If the application is placed behind some proxy that removes the SSL encryption (plain HTTP is used between the proxy and the server), then some specific configuration is required both on the c2cgeoportal application and on the proxy:
The proxy should add a specific header to the requests. For example
X-Https on
(X-Https
is the header name, andon
is the header value).
In Mako templates, if you need to know what scheme is used, you may test the
value of request.scheme
. For example:
var WMTS_OPTIONS = {
% if request.scheme == 'https':
url: 'https://my.wmts.server/'
% else:
url: 'https://my.wmts.server/'
% endif
/* ... */
};
Application and SSL certificate on the same server¶
If the SSL certificate and the application are located on the same server, all requests will be redirected to https. So you should change the scheme to https for all url except for some cases that should always use http (typically, all requests to localhost): see url parameter in tilegeneration configuration.
If you apply ssl encryption on your application, you should take care of the tiles url to use https scheme to avoid mixing secure and insecure contents.
Finally, you should redirect all http requests to https. Depending on your environment, you may need to request this via your infrastructure support.
In case you load http external resources into your application, you should use the resourceproxy service as described below.
Loading non https external resources¶
If you want to load non https external resources in your https application, you
should use the resourceproxy
service and add the list of hosts you want to access in your project
vars.yaml configuration file:
resourceproxy:
# list of urls from which it is safe to load content
targets:
#exampletargetname: https://www.camptocamp.com/?param1=%s¶m2=%s
rfinfo: https://www.rfinfo.vd.ch/rfinfo.php?no_commune=%s&no_immeuble=%s
Then you can access resources by building urls using the following schema:
https://<host>/resourceproxy?target=<targetname>&values=(<valueparam1>,...)
.
For example:
https://geoportail.camptocamp.com/main/resourceproxy?target=rfinfo&values=(175,2633)
Local certificate checks¶
Certain c2cgeoportal features open a http session to your c2cgeoportal services,
for example the checker
or the lingva_extractor
.
If you are running your server in https and wish to disable certificate checks in these
connections, you can achieve this by adding the following configuration element to your vars
file:
vars:
http_options:
verify: False
See other options in parameters of requests.Request
Reset password¶
When a user has forgotten his/her password, a new one may be sent by email if some additional GeoMapFish configuration is provided.
To ensure such an e-mail can be generated, you should add the following configuration
in the vars.yaml
file:
# SMTP configuration could be already there if needed by other feature
smtp:
host: smtp.example.com:465
ssl: true
user: <username>
password: <password>
starttls: false
reset_password:
# Used to send a confirmation email
email_from: info@camptocamp.com
email_subject: New password generated for GeoMapFish
email_body: |
Hello {user},
You have asked for a new password,
the newly generated password is: {password}
Sincerely yours
The GeoMapFish team
If the SMTP host ends with a colon (:) followed by a number, and there is no port specified, that suffix will be stripped off and the number interpreted as the port number to use.
Replace the smtp.example.com
value by a working SMTP server name.
Security update¶
To be sure that we regularly get the security updates, every night the GeoMapFish Docker images are rebuild. And every time we do a build we pull the new images to use them.
For project on Kubernetes we also deploy fresh built images every day.
This is good for security but with that we can’t guarantee that the result of a new build works exactly as the previous one.
To avoid incidents on production service, Kubernetes will publish a service only if he start correctly.
For Project on Docker Compose we have to choose ourself. The best is to build the image only on
integration when the result is correct we push it on a repository, and on production we will use the
images from the repository. The other solution is to use fixed tag for the base image, this imply that we
should do a minor update of the application to get the security fix. To do that you should set
in the project.yaml
file the template parameter unsafe_long_version
to True
in the
template_vars
section.
Access to WMS GetCapability¶
Set hide_capabilities
to true
in your vars.yaml
to disable
the WMS GetCapability when accessing the MapServer proxy (mapserverproxy).
Default: false
Access to the admin interface¶
To disable the admin interface, set enable_admin_interface
to false
in your vars.yaml
file.
Default: true
Access to services by external servers¶
By default, only localhost can access c2cgeoportal’s services.
To permit access to a specific service by an external server, you must set CORS headers (Access-Control-Allow-Origin
)
in your vars.yaml
file.
Add or modify the structure as follows:
headers:
<service_name>:
access_control_allow_origin: ["<domain1>", "<domain2>", ...]
access_control_max_age: 3600
A "*"
can be included in access_control_allow_origin
to allow everybody to
access, but no credentials will be passed in this case.
Available services are:
Entry:
index
config
api
Services:
themes
login
mapserver
print
profile
raster
layers
login
error
Allowed hosts¶
For security reason we check the host of the request, to be sure that the request is coming from an authorized domain.
For that we have the following configurations in the vars.yaml
file:
vars.authentication.allowed_hosts: List of hosts that are allowed to access the oauth2 authentication service (same host allowed).
vars.shortener.allowed_hosts: List of hosts that are allowed to be shortened (same host allowed).
vars.admin_interface.allowed_hosts: List of host that are allowed to be redirected by the ogc_server_clear_cache (same host allowed).
vars.allowed_hosts: List of hosts that are allowed to access the application (theme and dynamic.json).