Для защиты данных при их передаче между клиентом и сервером используется
шифрование по ГОСТ 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
.Для защиты данных при их передаче между клиентом и сервером используется шифрование 3DES или AES-128. Используются секретные ключи, которые вырабатываются при выполнении протокола Handshake в рамках взаимной аутентификации (см. Взаимная аутентификация), а также параметры криптографических преобразований согласно The Transport Layer Security (TLS) Protocol. Поддерживаемые CipherSuites:
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
Примечание
Все шифрование на стороне клиента осуществляется программно.
Для того чтобы реализовать шифрование данных необходимо:
decode
в sslServer.dll
.encode
в sslServer.dll
.Пример использования команды encode на стороне клиента
// Преобразовать данные для передачи по защищенному каналу
var encodedDataToSign = JCWebClient2.encode( args: { data: utf8encodedData } );
// Преобразовать подпись для передачи по защищенному каналу
var encodedSignatureData = JCWebClient2.encode( args: { data: signature } );
// Данные для передачи на сервер
var sdata = {
connectionID: connectionID,
data: encodedDataToSign,
signature: encodedSignatureData
};
// Сериализовать в JSON
var 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;
}
Пример использования команды 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);
}