7.9.1 Токен GOST 2
Для защиты данных при их передаче между клиентом и сервером используется шифрование по ГОСТ 28147-89. Используются секретные ключи, которые вырабатываются при выполнении протокола Handshake в рамках взаимной аутентификации (см. Взаимная аутентификация), а также параметры криптографических преобразований по ГОСТ 28147-89, соответствующие CipherSuite TLS_GOSTR341001_WITH_28147_CNT_IMIT согласно GOST 28147-89 Cipher Suites for Transport Layer Security (TLS).
Все шифрование на стороне клиента осуществляется программно.
Для того чтобы реализовать шифрование данных по ГОСТ 28147-89 необходимо:
- Осуществить взаимную аутентификацию.
- Реализовать зашифровку/расшифровку данных
- На стороне клиента:
- На стороне сервера:
- Реализуйте функцию расшифровки данных. В готовом примере Демобанк это реализовано через функцию
decodeвsslServer.dll.
- Реализуйте функцию расшифровки данных. В готовом примере Демобанк это реализовано через функцию
- На стороне сервера:
- Реализуйте функцию зашифровки данных. В готовом примере Демобанк это реализовано через функцию
encodeвsslServer.dll.
- Реализуйте функцию зашифровки данных. В готовом примере Демобанк это реализовано через функцию
7.9.2 Токен PKI
Для защиты данных при их передаче между клиентом и сервером используется шифрование 3DES или AES-128. Используются секретные ключи, которые вырабатываются при выполнении протокола Handshake в рамках взаимной аутентификации (см. Взаимная аутентификация), а также параметры криптографических преобразований согласно The Transport Layer Security (TLS) Protocol. Поддерживаемые CipherSuites:
TLS_RSA_WITH_3DES_EDE_CBC_SHATLS_RSA_WITH_AES_128_CBC_SHATLS_RSA_WITH_AES_256_CBC_SHATLS_RSA_WITH_AES_128_CBC_SHA256TLS_RSA_WITH_AES_256_CBC_SHA256
Все шифрование на стороне клиента осуществляется программно.
Для того чтобы реализовать шифрование данных необходимо:
- Осуществить взаимную аутентификацию.
- Реализовать зашифровку/расшифровку данных
- На стороне клиента:
- Для зашифровки данных, направляемых клиентом серверу, используйте функцию encode.
- Для расшифровки данных, направляемых сервером клиенту, используйте функцию decode.
- На стороне сервера:
- Реализуйте функцию расшифровки данных. В готовом примере Демобанк это реализовано через функцию
decodeвsslServer.dll.
- Реализуйте функцию расшифровки данных. В готовом примере Демобанк это реализовано через функцию
- Реализуйте функцию зашифровки данных. В готовом примере Демобанк это реализовано через функцию
encodeвsslServer.dll.
- Реализуйте функцию зашифровки данных. В готовом примере Демобанк это реализовано через функцию
7.9.3 Использование команды encode
Пример использования команды encode на стороне клиента
// Преобразовать данные для передачи по защищенному каналуvar encodedDataToSign = JCWebClient2.encode( args: { data: utf8encodedData } );// Преобразовать подпись для передачи по защищенному каналуvar encodedSignatureData = JCWebClient2.encode( args: { data: signature } );// Данные для передачи на серверvar sdata = { connectionID: connectionID, data: encodedDataToSign, signature: encodedSignatureData};// Сериализовать в JSONvar sdata = $.JSON.encode(sdata);// Оправить данные на сервер$.ajax({ async: false, type: "POST", url: "WebService.asmx/uploadSignedData", data: sdata, contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { ajaxError = false; }, error: function (a, b, c) { ajaxError = true; },});Пример использования функции encode() на стороне сервера (C#)
[WebMethod()]public byte[] getUploadedData(int connectionID, int page, int rows, string sidx, string sord){ // Получить объект соединения по идентификатору соединения ConnectionState state = getConnection(connectionID); // Получить объект ssl сервера, созданный в методе loginBegin SSLServer server = state.server; // Проверить, аутентифицирован ли пользователь if (state.userLoggedIn == false) throw new System.Exception("User not logged in"); // Создать объект сериализации в JSON JavaScriptSerializer js = new JavaScriptSerializer(); // Сериализировать данные в строку JSON string serializedData = js.Serialize(data); // Перевести строку JSON в массив byte[] serializedDataArray = ( new System.Text.UTF8Encoding()).GetBytes(serializedData); // Получить данные для передачи клиенту byte[] retVal = server.encode(serializedDataArray); return retVal;}7.9.4 Использование команды decode
Пример использования команды decode на стороне клиента
// Оправить данные на сервер$.ajax({ async: false, type: "POST", url: "WebService.asmx/renewCert", data: data, contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { serverRenewResponce = msg.d; ajaxError = false; }, error: function (a, b, c) { alert(a + ";" + b + ";" + c); ajaxError = true; }});if (ajaxError == true) { throw "";}// Преобразовать данные из защищенного каналаserverRenewResponce = JCWebClient2.decode( args: { data: serverRenewResponce } );Пример использования функции decode() на стороне сервера (C#)
[WebMethod()]public void uploadData(int connectionID, byte[] data){ // Получить объект соединения по идентификатору соединения ConnectionState state = getConnection(connectionID); // Получить объект ssl сервера, созданный в методе loginBegin SSLServer server = state.server; // Проверить, аутентифицирован ли пользователь if (state.userLoggedIn == false) throw new System.Exception("User not logged in"); // Расшифровать данные с помощью криптографического компонента byte[] dataToSignD = server.decode(dataToSign);}