2017-07-19 2 views
0

Ich bin ein Anfänger in Angular 2. Ich versuche ein Login-Formular zu implementieren, das die E-Mail-Adresse und das Passwort nach bestimmten Verschlüsselungsschritten sendet zum Server.Angular 2: window.crypto.tweet.importKey funktioniert in "localhost", aber nicht auf "ip"

I implementiert AES-ECB durch Verwendung von AES-CTR aus,

https://github.com/diafygi/webcrypto-examples

ich verwendet habe, die 'importkey' und 'encrypt' -Methode wie folgt

public deriveAKey(input, encryptKey, cryptoIV) { 

    var ref: TopDivComponent = this; 
    console.log('Testing before importKey...'); 

    window.crypto.subtle.importKey(
     "raw", 
     ref.stringToArrayBuffer(encryptKey), 
     { 
      name: "AES-CTR", 
     }, 
     true, 
     ["encrypt"] 
    ).then(function (key) { 
     console.log('Inside then...'); 
     var newvar = ref.stringToArrayBuffer(cryptoIV); 
     var encrypt = window.crypto.subtle.encrypt(
      { 
       name: "AES-CTR", 
       counter: newvar, 
       length: 128, 
      }, 
      key, 
      ref.stringToArrayBuffer(input) 
     ).then(function (encrypted) { 
      var temp = ref.arrayBufferToString(encrypted); 
      console.log('Encrypted First: ' + encrypted); 
      console.log('Temp: ' + temp); 
      console.log('Key: ' + key); 
      let fin_encrypted = btoa(temp); 
      // console.log('Encrypted Snc/d: ' + fin_encrypted); 
      ref.response(fin_encrypted); 
      // console.log('From deriveKey: ' + fin_encrypted); 
     }); 
    }); 
} 

Ich verwende einen lokalen Server, um die Antwort zu erhalten. Alles funktioniert gut, wenn Sie localhost verwenden. Die Anforderung und die Antwort werden ordnungsgemäß vom Server gesendet und erhalten. Aber, wenn über IP verbunden, zeigt es einen Fehler "NotSupportedError: Nur sichere Ursprünge sind erlaubt".

Als ich Chrome Kanarienvogel verwendet, hieß es, dass ImportKey-Methode nicht erkannt wird. Wenn ich es also mit Chrome "konsolitierte", ging das Steuerelement nicht über die Methode "importKey" hinaus. Was könnte das Problem sein?

Antwort

1

Chrome beschränkt die Verwendung von WebCryptographyApi, um die Herkunft zu sichern. Es bedeutet "https". localhost ist eine spezielle Adresse für die Entwicklung aktiviert. Um WebCrypto in einer realen Umgebung zu verwenden, müssen Sie daher einen SSL/TLS-Server

einrichten
Verwandte Themen