Foire aux questions juridiques
Beaucoup de personnes restent sceptiques quand on leur dit que « La signature électronique d'un contrat ou d'un document avec Efalia Sign a la même valeur légale qu'une signature manuscrite.» Et pour cause ! Les réglementations française et européenne en matière de confiance numérique sont jargonneuses et complexes. Mais mises entre les mains de spécialistes, elles définissent précisément les conditions et modalités de mise en œuvre de la signature et de l'horodatage électronique, et permettent désormais d'abandonner le papier en toute confiance.
Pour vous aider à y voir plus clair nous avons construit cette foire aux questions sous forme d'un vrai/faux pour répondre autant que possible à toutes les questions que vous vous posez en matière juridique. Nous avons aussi fait réaliser, avec succès, un audit de conformité juridique de Efalia Sign par un cabinet d'avocats spécialisé en droit du numérique.
Si vous n'avez pas le courage de lire ces quelques lignes, vous pouvez vous contenter de découvrir nos garanties juridiques. Il s'agit d'engagements concrets vous permettant d'utiliser Efalia Sign en toute confiance !
Si vous avez des questions sur le fonctionnement de Efalia Sign, vous pouvez consulter la FAQ d'utilisation du service.
La signature électronique
Lorsque vous signez un document en ligne avec Efalia Sign, des dispositions techniques sont mises en place et des composants techniques sont ajoutés à votre document pour garantir les mêmes principes qu'une signature sur papier :
- prouver que tous les signataires ont bien signé exactement le même document. C'est ce qu'on appelle l'intégrité du document. C'est le cachet électronique RGS* qui prouve que le document ainsi que les coordonnées des signataires n'ont pas été modifiés entre les différents actes de signature. Par ailleurs, la date de signature de chaque signataire est certifiée par un horodatage à valeur probatoire.
- Le cachet RGS*est fourni par ChamberSign, autorité de certification mise en œuvre par les Chambres de Commerce et d'Industrie françaises et qui s'inscrit dans le réseau européen des Chambres de Commerce sous le label ChamberSign Europe. Cette autorité est reconnue par Adobe.
- L'horodatage est réalisé avec un service d'horodatage accrédité, Universign (groupe Oodrive), le leader européen de la gestion sécurisée de fichiers en ligne.
- prouver l'identité de chaque signataire. C'est-à-dire que ce sont bien les personnes supposées signer le document qui ont donné leur accord. Pour cela nous nous appuyons sur un ensemble de données qui constituent un faisceau de preuve plus robuste qu'une signature manuscrite. Il s'agit du nom et prénom du signataire, de son adresse mail, de son adresse IP et de son numéro de portable auquel est envoyé un code à saisir par SMS (ce code n'est valable qu'une seule fois et sa validité n'est que de 30 minutes). La plupart de ces informations sont reprises, pour tous les signataires, dans la dernière page du fichier pdf du contrat. (voir plus bas). L'ensemble de ces informations sont disponibles, pour le déposant, dans l'écran de suivi du contrat.
- prouver le consentement de chaque signataire. C'est-à-dire qu'ils ont bien pris connaissance du contenu du contrat et l'approuvent explicitement. C'est tout simplement le fait de cliquer sur le bouton « Je signe ce contrat », situé en dessous de la prévisualisation des documents, qui assure ce consentement.
[ Faux ] Je peux me contenter d'un mail ou d'une signature scannée pour officialiser certains documents.
Attention donc aux signatures scannées ou faxées ! Il est en effet très facile de falsifier un document faxé ou scanné en y ajoutant manuellement l'image d'une signature manuscrite.
D'ailleurs la jurisprudence a précisé que ces procédés ne sont pas conformes aux dispositions légales :
Un bref historique :
La loi N° 2000-230 du 13 mars 2000 portant adaptation du droit de la preuve aux technologies de l'information et relative à la signature électronique, dispose à l'article 1316-1 : « L'écrit sous forme électronique est admis en preuve au même titre que l'écrit sur support papier, sous réserve que puisse être dûment identifiée la personne dont il émane et qu'il soit établi et conservé dans des conditions de nature à en garantir l'intégrité.»
Le Règlement européen eIDAS du 23 juillet 2014 enfonce le clou :
- « une signature électronique ne devrait pas se voir refuser un effet juridique au motif qu'elle se présente sous une forme électronique ou qu'elle ne satisfait pas à toutes les exigences de la signature électronique qualifiée. »
- « un document électronique ne pourrait se voir refuser un effet juridique au motif qu'il se présente sous une forme électronique afin de garantir qu'une transaction électronique ne sera pas rejetée au seul motif qu'un document se présente sous une forme électronique. »
Ce règlement (c'est-à-dire une loi européenne directement applicable aux États membres) est entré en vigueur le 1e juillet 2016
Une réforme en cours du droit des contrats, des obligations et de la preuve, faisant suite à l'ordonnance n°2016-131 du 10 février 2016, traite aussi de la signature électronique.
[ Faux ]
FreeMarker template error (HTML_DEBUG mode; use RETHROW in production!)
The following has evaluated to null or missing:
==> app.getPageParam('part.' + part + '.TF' + tf + '.title') [in template "page/product/faq_legal.ftl" at line 22, column 45]
----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: ${app.getPageParam("part." + part + "... [in template "page/product/faq_legal.ftl" at line 22, column 43]
----
Java stack trace (for programmers):
----
freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134)
at freemarker.core.EvalUtil.coerceModelToTextualCommon(EvalUtil.java:451)
at freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:374)
at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:96)
at freemarker.core.DollarVariable.accept(DollarVariable.java:59)
at freemarker.core.Environment.visit(Environment.java:363)
at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:316)
at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:272)
at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:243)
at freemarker.core.Environment.visitIteratorBlock(Environment.java:596)
at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108)
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94)
at freemarker.core.Environment.visit(Environment.java:363)
at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:316)
at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:272)
at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:243)
at freemarker.core.Environment.visitIteratorBlock(Environment.java:596)
at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108)
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94)
at freemarker.core.Environment.visit(Environment.java:327)
at freemarker.core.Environment.visit(Environment.java:333)
at freemarker.core.Environment.process(Environment.java:306)
at freemarker.template.Template.process(Template.java:386)
at com.adminext.contratprive.view.FreeMarkerView.renderMergedOutputModel(FreeMarkerView.java:243)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1243)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:859)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.adminext.contratprive.web.filter.ContextApplicationFilter.doFilter(ContextApplicationFilter.java:34)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.adminext.commons.web.filter.DuplicateResponseFilter.doFilterInternal(DuplicateResponseFilter.java:498)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.adminext.commons.util.spring.transaction.TransactionErrorRequestFilter.doFilterInternal(TransactionErrorRequestFilter.java:29)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:415)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1639)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:829)
The following has evaluated to null or missing: ==> app.getPageParam('part.' + part + '.TF' + tf + '.title') [in template "page/product/faq_legal.ftl" at line 22, column 45] ---- Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${app.getPageParam("part." + part + "... [in template "page/product/faq_legal.ftl" at line 22, column 43] ---- Java stack trace (for programmers): ---- freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) at freemarker.core.EvalUtil.coerceModelToTextualCommon(EvalUtil.java:451) at freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:374) at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:96) at freemarker.core.DollarVariable.accept(DollarVariable.java:59) at freemarker.core.Environment.visit(Environment.java:363) at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:316) at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:272) at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:243) at freemarker.core.Environment.visitIteratorBlock(Environment.java:596) at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at freemarker.core.Environment.visit(Environment.java:363) at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:316) at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:272) at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:243) at freemarker.core.Environment.visitIteratorBlock(Environment.java:596) at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at freemarker.core.Environment.visit(Environment.java:327) at freemarker.core.Environment.visit(Environment.java:333) at freemarker.core.Environment.process(Environment.java:306) at freemarker.template.Template.process(Template.java:386) at com.adminext.contratprive.view.FreeMarkerView.renderMergedOutputModel(FreeMarkerView.java:243) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1243) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:859) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.adminext.contratprive.web.filter.ContextApplicationFilter.doFilter(ContextApplicationFilter.java:34) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.adminext.commons.web.filter.DuplicateResponseFilter.doFilterInternal(DuplicateResponseFilter.java:498) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.adminext.commons.util.spring.transaction.TransactionErrorRequestFilter.doFilterInternal(TransactionErrorRequestFilter.java:29) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:415) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1639) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:829)