2015-12-29 22 views
7

Sto integrando la mia app con Xero che richiede due certificati. Li ho caricati su Azure con l'aiuto dell'articolo this, ma non riesco ancora a connettermi allo Xero API. Spero che qualcuno abbia esperienza nell'integrazione di un'applicazione partner Xero con un'app Web di Azure.Connessione del sito Web di Azure all'applicazione partner Xero

Ho caricato due file pfx; uno è un certificato autofirmato e l'altro è il certificato del partner emesso da Xero. L'ultimo file pfx contiene due certificati; un subconcessione commerciale privata CA1 (indipendentemente dal mezzo) e un certificato di identificazione Entrust univoco per la mia app.

Sto utilizzando il seguente codice per caricare i certificati per la loro identificazione unica:

static X509Certificate2 GetCertificateFromStore(string thumbprint) 
    { 
     var store = new X509Store(StoreLocation.CurrentUser); 

     try 
     { 
      thumbprint = Regex.Replace(thumbprint, @"[^\da-zA-z]", string.Empty).ToUpper(); 
      store.Open(OpenFlags.ReadOnly); 

      var certCollection = store.Certificates; 
      var currentCerts = certCollection.Find(X509FindType.FindByTimeValid, DateTime.Now, false); 
      var signingCert = currentCerts.Find(X509FindType.FindByThumbprint, thumbprint, false); 

      if (signingCert.Count == 0) 
      { 
       throw new Exception($"Could not find Xero SSL certificate. cert_name={thumbprint}"); 
      } 

      return signingCert[0]; 
     } 
     finally 
     { 
      store.Close(); 
     } 
    } 

Questo funziona bene a livello locale, ma sul mio sito web azzurro ottengo un errore di 403.7:

The page you are attempting to access requires your browser to have a Secure Sockets Layer (SSL) client certificate that the Web server recognizes. 

ho anche guardato i seguenti riferimenti per cercare di risolvere il problema:

Quello che non hanno ancora provato:

  • Conversione mia web app per un servizio cloud; cercando di evitare di farlo, tuttavia, non sono sicuro di quali siano i passaggi.
  • Utilizzo di una VM; Non ho trovato alcuna procedura dettagliata su come farlo, ma sembra un'opzione migliore di quella sopra.

screenshot dell'errore: Error

+0

Solo per riferimento, noi abbiamo lo stesso problema e ad un certo punto ha avuto un caso aperto con Microsoft su qui - https://social.msdn.microsoft.com/Forums/azure/en-US/c9e17417-e50d-4eff-9676-7d76db33264c/certificate-chain-not-being-imported-to-azure-website?forum = windowsazurewebsitespreview. –

risposta

1

Finalmente ho funzionato e pubblicherò la mia soluzione che, si spera, salverà gli sviluppatori un sacco di tempo e frustrazione quando ci si connette a Xero.

L'applicazione partner Xero non funziona con i servizi di app di Azure (siti Web). Devi caricare due certificati aggiuntivi insieme all'autofirmato e al certificato del partner Xero. Questi possono essere trovati sul computer locale e possono essere esportati in formato cer (dettagli di questi certificati di seguito). Non essere in grado di caricare questi certificati per i servizi di app di Azure è davvero la stampella. Devono anche essere caricati su negozi specifici (Root/CA), che non è possibile fare con i servizi di app. Questi sono i passaggi che ho seguito per connettermi con Xero.

  1. trasformato il mio sito web per Azure Cloud Services: ero stanco di cambiare il nostro ambiente come abbiamo già un sito live. Si scopre che i servizi cloud sono essenzialmente gli stessi dei servizi di app; stai ancora distribuendo su una VM da qualche parte. Tuttavia, hai un maggiore controllo sul back-end e puoi accedere al desktop remoto. Ulteriori informazioni here. link utilizzati di seguito per creare e convertire il mio sito web per i servizi cloud:

  2. Caricato 4 certificati per il mio progetto di cloud utilizzando il portale azzurro. Sarà necessario caricare i seguenti:

    • Il certificato auto-firmato (quello creato here)
    • Il partner certificato rilasciato da Xero (probabilmente ce l'ha here)
    • il certificato intermedio Entrust (questo dovrebbe essere contenuta entro i .p12 file scaricato in precedenza)
    • Il certificato Entrust Root (questo dovrebbe essere nella vostra principale attendibile **)
  3. Aggiunti i certificati al mio ruolo Web nel progetto Cloud. Devi fare clic con il tasto destro del mouse sulle proprietà del tuo ruolo web e andare alla scheda dei certificati. Aggiungi tutti e 4 i certificati al tuo ruolo web utilizzando l'identificazione personale che sarà visibile nel portale dopo averli caricati.Prendere nota del Nome Store per i due certs Entrust:

enter image description here

Potrebbe essere necessario adottare un sacco di pazienza, come devo ottenere attraverso passo uno. Dovrai capire il nuovo processo di distribuzione, come eseguire il debug del tuo progetto a livello locale e probabilmente un sacco di altri dettagli frustranti!

** Questa è la corretta certificazione Entrust Root si può ottenere utilizzando certmgr.msc:

enter image description here

3

un errore 403 significa che non stiamo vedendo il certificato Xero Entrust nella connessione. Ulteriori dettagli su di esso qui - http://blog.xero.com/developer/api-overview/http-response-codes/#403

Fondamentalmente, viene eseguito sull'istanza IIS locale perché è una macchina "single tenant" in cui l'applicazione non deve essere isolata dagli altri.

Mentre l'applicazione è bloccata dal modello di sicurezza utilizzato per isolare i siti Web.

In sintesi, è necessario eseguire le seguenti operazioni per ottenere i certificati di lavoro su Azure:

1) esportare il certificato, la chiave privata, e tutti i certificati intermedi in un file PFX.

2) Caricare il certificato utilizzando il portale di Azure per il servizio cloud che si sta eseguendo (dovrebbe apparire come più voci).

3) Accedere al certificato tramite il magazzino macchina nel codice.

Sulla base dei dati tratti da: https://community.xero.com/developer/discussion/626401

https://social.msdn.microsoft.com/Forums/azure/en-US/29b30f25-eea9-4e8e-8292-5ac8085fd42e/access-to-certificates-in-azure-web-sites

Spero che risolto il problema.

+1

Per la cronaca ho fatto tutti questi passaggi e ottenendo gli stessi risultati. – tqrecords

+1

questo potrebbe aiutarti - http://developer.xero.com/documentation/advanced-docs/using-partner-applications-with-iis/, fammi sapere se lo fa e aggiornerò la mia risposta per includere le informazioni – DeJaVo

+0

Questi passaggi devono essere eseguiti localmente, non ho accesso al pool di applicazioni o alle impostazioni IIS su Azure. – tqrecords

0

Assicurarsi di aver aggiunto l'impostazione dell'applicazione dal passaggio 2 di referenced article.

Adding an app setting named WEBSITE_LOAD_CERTIFICATES with its value set to the thumbprint of the certificate will make it accessible to your web application. You can have multiple comma-separated thumbprint values or can set this value to “ * “ (without quotes) in which case all your certificates will be loaded to your web applications personal certificate store.

mi piacerebbe anche essere più preciso specificando dei certificati, vale a dire l'uso:

var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

Questo è il modo in cui carichiamo certs in tutta la nostra Azure Web Apps.