diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c
index 91f82e77082763eaee8f2019f34ce19345eeb79d..b20ea9c8fc54ab1552fbd26cc729d5c16c277627 100644
--- a/coreapi/linphonecore.c
+++ b/coreapi/linphonecore.c
@@ -1364,23 +1364,11 @@ static void linphone_core_init(LinphoneCore * lc, const LinphoneCoreVTable *vtab
 	lc->http_provider = belle_sip_stack_create_http_provider(sal_get_belle_sip_stack(lc->sal), "0.0.0.0");
 	
 	certificates_config_read(lc);
-	belle_tls_verify_policy_t *tls_policy = belle_tls_verify_policy_new();
-	belle_tls_verify_policy_set_root_ca(tls_policy, sal_get_root_ca(lc->sal));
-	belle_http_provider_set_tls_verify_policy(lc->http_provider, tls_policy);
-
-	if (lc->vtable.display_status)
-		lc->vtable.display_status(lc, _("Configuring"));
-	linphone_core_set_state(lc, LinphoneGlobalConfiguring, "Configuring");
 	
 	remote_provisioning_uri = linphone_core_get_provisioning_uri(lc);
-	if (remote_provisioning_uri) {
-		int err=linphone_remote_provisioning_download_and_apply(lc, remote_provisioning_uri);
-		if (err==-1){
-			linphone_configuring_terminated(lc, LinphoneConfiguringFailed, "Bad URI");
-		}
-	} else {
+	if (remote_provisioning_uri == NULL) {
 		linphone_configuring_terminated(lc, LinphoneConfiguringSkipped, NULL);
-	}
+	} // else linphone_core_start will be called after the remote provisioining (see linphone_core_iterate)
 }
 
 /**
@@ -2188,6 +2176,27 @@ void linphone_core_iterate(LinphoneCore *lc){
 	time_t curtime=time(NULL);
 	int elapsed;
 	bool_t one_second_elapsed=FALSE;
+	const char *remote_provisioning_uri = NULL;
+	
+	if (linphone_core_get_global_state(lc) == LinphoneGlobalStartup) {
+		if (sal_get_root_ca(lc->sal)) {
+			belle_tls_verify_policy_t *tls_policy = belle_tls_verify_policy_new();
+			belle_tls_verify_policy_set_root_ca(tls_policy, sal_get_root_ca(lc->sal));
+			belle_http_provider_set_tls_verify_policy(lc->http_provider, tls_policy);
+		}
+
+		if (lc->vtable.display_status)
+			lc->vtable.display_status(lc, _("Configuring"));
+		linphone_core_set_state(lc, LinphoneGlobalConfiguring, "Configuring");
+		
+		remote_provisioning_uri = linphone_core_get_provisioning_uri(lc);
+		if (remote_provisioning_uri) {
+			int err = linphone_remote_provisioning_download_and_apply(lc, remote_provisioning_uri);
+			if (err == -1) {
+				linphone_configuring_terminated(lc, LinphoneConfiguringFailed, "Bad URI");
+			}
+		} // else linphone_configuring_terminated has already been called in linphone_core_init
+	}
 
 	if (curtime-lc->prevtime>=1){
 		lc->prevtime=curtime;
diff --git a/tester/remote_provisioning_tester.c b/tester/remote_provisioning_tester.c
index 04ced1444b9197ad37d2a40438f7fde0eb6acaaf..1430c31b388267d1ec4e6186df0e416615d107d4 100644
--- a/tester/remote_provisioning_tester.c
+++ b/tester/remote_provisioning_tester.c
@@ -50,9 +50,6 @@ static void remote_provisioning_http(void) {
 
 static void remote_provisioning_https(void) {
 	LinphoneCoreManager* marie = linphone_core_manager_new2("marie_remote_https_rc", FALSE);
-	char rootcapath[256] = {0};
-	snprintf(rootcapath, sizeof(rootcapath), "%s/rootca.pem", liblinphone_tester_file_prefix);
-	linphone_core_set_root_ca(marie->lc, rootcapath);
 	CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1));
 	CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneRegistrationOk,1));
 	linphone_core_manager_destroy(marie);