Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline himmzso  
#1 Оставлено : 15 февраля 2024 г. 16:52:11(UTC)
himmzso

Статус: Новичок

Группы: Участники
Зарегистрирован: 15.02.2024(UTC)
Сообщений: 1

Добрый день!

Пытаюсь наладить взаимодействие платежным шлюзом с Билайна, уперся в формирование ЭЦП. В спецификации Билайна написано, что ЭСП формируется по алгоритму ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012,и потом должна быть закодирована в base64. Написал код, который вызывает сryptcp и формирует подпись, но на стороне Билайна подпись не проходит.
В чем может быть причина? Может я как то не так формирую подпись? Код ниже.

Пример запрос из спецификации билайн:

Код:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://payment.beepayxp.jetinfosoft.ru">
  <soap:Header>
    <digitalSignature>
      <signature>uL45S07uVqJ3a8dJ68AwhvWyC4rthbfPFsKcJHEDo3DvV6dhv2ocY78S3xrJRJsfl6ICawK4vwjW3w8/24l5xQ==</signature>
    </digitalSignature>
  </soap:Header>
  <soap:Body>
    <!--Подписываемая и проверяемая часть-->
  </soap:Body>
</soap:Envelope>



Код для формирования подписи:

Код:
func (o *Signer) Sign(file []byte, certHash string) ([]byte, error) {
	stdin := bytes.NewBuffer(file)
	stderr := &bytes.Buffer{}

	name := uuid.New()
	infileName := name.String()
	outfileName := infileName + ".sig"
	defer func() { _ = os.Remove(infileName) }()

	defer func() { _ = os.Remove(outfileName) }()

	err := os.WriteFile(infileName, file, 0o777)
	if err != nil {
		return nil, err
	}

	cmd := exec.Command(
		o.CryptcpPath,
		"-sign",
		"-thumbprint", certHash,
		"-der",
		"-nochain",
		"-hashAlg", "1.2.643.7.1.1.2.2",
		"-pin", o.Pin,
		infileName,
		outfileName,
	) // /opt/cprocsp/bin/cryptcp -sign -pin admin -nochain -der -thumbprint <certHash> test.xml test.sig 


	cmd.Stdin = stdin
	cmd.Stderr = stderr

	err = cmd.Run()
	if err != nil {
		return nil, err
	}

	signedFileBytes, err := os.ReadFile(outfileName)
	if err != nil {
		return nil, err
	}

	return signedFileBytes, nil
}

Отредактировано пользователем 16 февраля 2024 г. 10:46:36(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.