Skip to content

Instantly share code, notes, and snippets.

@Leo5878
Last active July 18, 2023 10:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Leo5878/bccb9e9bac254fcb23bf514a3480b039 to your computer and use it in GitHub Desktop.
Save Leo5878/bccb9e9bac254fcb23bf514a3480b039 to your computer and use it in GitHub Desktop.
Проброс сертификата на примере Fetch Deno для Сбербанка

С первого февряля, 2023 года сбербанка выпустил собственный самподписанный сертификат, совместно с минцифрой. Официальная документая (по ссылки так же можно скачать сертификат).

Я набросал пример с Deno, версией 1.30.2. На момент написания этой заметки, это является еще эксперементальной опцией. Дока по Deno.

Это будет полезно, в том случае, если вы как и я не хотите устанавливать сертификат в систему. Я думаю, что в целом на любом языке и платформе можно сделать подобное.

const caCert = await Deno.readTextFile("./Cert_CA.pem");
const client = Deno.createHttpClient({ caCerts: [ caCert ] });
const req = await fetch("https://securepayments.sberbank.ru/wiki/doku.php/certificates:start", { client });

console.log(req)

В ответе на запрос у вас должно вернутся что-то на подобии этого:

Response {
  body: ReadableStream { locked: false },
  bodyUsed: false,
  headers: Headers {
  "cache-control": "no-store, no-cache, must-revalidate",
  connection: "keep-alive",
  "content-type": "text/html; charset=utf-8",
  date: "Tue, 07 Feb 2023 17:46:48 GMT",
  expires: "Thu, 19 Nov 1981 08:52:00 GMT",
  pragma: "no-cache",
  server: "nginx",
  "set-cookie": "DWd6fcb57a725757b22fe830cccebe05e6=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/...",
  "transfer-encoding": "chunked",
  vary: "Cookie",
  "x-powered-by": "PHP/7.4.32",
  "x-ua-compatible": "IE=edge,chrome=1"
},
  ok: true,
  redirected: false,
  status: 200,
  statusText: "OK",
  url: "https://securepayments.sberbank.ru/wiki/doku.php/certificates:start"

В случае не удачи, вы получите это:

Sending fatal alert BadCertificate
error: Uncaught (in promise) TypeError: error sending request for url (https://securepayments.sberbank.ru/wiki/doku.php/certificates:start): error trying to connect: invalid peer certificate contents: invalid peer certificate: UnknownIssuer
const req = await fetch("https://securepayments.sberbank.ru/wiki/doku.php/certificates:start");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment