Skip to content

Hands-on with the Curl library using https and custom certificates

Notifications You must be signed in to change notification settings

Kerminator1973/curlhttps

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Π‘Π±ΠΎΡ€ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Curl для встраивания Π² C++ прилоТСния

ЦСль рСпозитария - ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Curl для использования Π² прилоТСниях Π½Π° C++ для выполнСния https-запросов с использованиСм самоподписанных сСтификатов.

ЦСлСвая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°: Microsoft Windows 7/10. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹: Visual Studio 2013 ΠΈ 2019.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° curllib:

  1. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ curl Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Microsoft Windows 10, Ρ‡Ρ‚ΠΎ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° отсутствиС ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ совмСстимости с этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой
  2. БобираСтся компиляторами Visual Studio 2013 (Boost.Beast Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Visaul Studio 2015 ΠΈ Π²Ρ‹ΡˆΠ΅)
  3. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ: HTTP/2, HTTP/3
  4. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ программирования: многопоточная (easy), однопоточная ассинхронная (multi), многопоточная асинхронная (multi)
  5. Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с IPv6
  6. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмам, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅

НСдостатки:

  1. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ программирования (API) - язык Π‘ΠΈ. Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π‘++ это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ стилистичСской Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°
  2. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‡Π΅Π½ΡŒ комплСксная
  3. МодСль Easy, с высокой Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² ΠΌΠ΅ΠΆΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ взаимодСйствии, Ρ‡Ρ‚ΠΎ ΡƒΡ…ΡƒΠ΄ΡˆΠ°Π΅Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов ΠΈ услоТняСт сопровоТдСниС ΠΊΠΎΠ΄Π°
  4. БообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° английском языкС. Для обСспСчСния ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ пСрСвСсти Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ язык ΠΎΠΊΠΎΠ»ΠΎ 100 сообщСний

Update 2024 Π³ΠΎΠ΄Π°: Π² число рассматриваСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΡ€ΠΎΠΌΠ΅ curllib ΠΈ boost.beast, Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ POCO C++ Libraries. Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° являСтся кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ. ΠšΡ€ΠΎΠΌΠ΅ сСтСвого взаимодСйствия, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° содСрТит Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ² ΠΊ популярным Π‘Π£Π‘Π”, Π² частности: ODBC, MySQL, SQLite.

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° (Π³Π΄Π΅ Π²Π·ΡΡ‚ΡŒ исходныС тСксты Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ)

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° curllib зависит ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π² частности ΠΎΡ‚ zlib ΠΈ openSSL.

alt text

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΏΠΎ сборкС curllib.lib ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описана Π² Ρ„Π°ΠΉΠ»Π΅ "\winbuild\BUILD.WINDOWS.txt" исходных тСкстов, доступных Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚Π°Ρ€ΠΈΠΈ. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ исходники ΠΌΠΎΠΆΠ½ΠΎ ΠΈ с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ тСксты openSSL ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Git-рСпозитария: git clone git://git.openssl.org/openssl.git, Π»ΠΈΠ±ΠΎ ΠΈΠ· Π·Π΅Ρ€ΠΊΠ°Π»Π° Π½Π° GitHub: git clone https://github.com/openssl/openssl.git

ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ исходныС тСксты zlib ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ скачСны ΠΈΠ· рСпозитария GitHub ΠΎΡ‚ Madler - Mark Adler - соавтор zlib.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… сСтях

Π’ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… сСтях ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ прокси-сСрвСра, Π² Π·Π°Π΄Π°Ρ‡ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… входят:

  • Сдиная Ρ‚ΠΎΡ‡ΠΊΠ° контроля ΠΎΠ±ΠΌΠ΅Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ, Π² Ρ‚ΠΎΠΌ числС, для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π·Π»ΠΎΠ²Ρ€Π΅Π΄ΠΎΠ² ΠΈ вирусов
  • ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ http-Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°
  • Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° доступа ΠΊ Π·Π°ΠΏΡ€Π΅Ρ‰Ρ‘Π½Π½Ρ‹ΠΌ ΠΈ Ρ€Π°Π·Π²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ сайтам
  • ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ использования Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ

Доступ ΠΊ прокси-сСрвСру ΠΏΠΎΡ‡Ρ‚ΠΈ Π² 100% случаСв Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ 2024 Π³ΠΎΠ΄Ρƒ прокси-сСрвСра Π±Ρ‹Π»ΠΈ массово ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ с Active Directory, Ρ‡Ρ‚ΠΎ позволяСт ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ систСмы ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠ½/ΠΏΠ°Ρ€ΠΎΠ»ΡŒ доступа сторонным прилоТСниям. Для прилоТСния это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ - ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ "подтянуты" автоматичСски. Π’Π°ΠΆΠ½Ρ‹ΠΌ являСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ адрСса прокси-сСрвСра.

ΠŸΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт ΠΎΡ‚ использования прокси-сСрвСра - ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ соврСмСнныС TLS. НапримСр, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ TLS 1.3, Π½ΠΎ прокси-сСрвСр ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ TLS 1.1., Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сСрвСрами, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° TLS 1.1 Π±Ρ‹Π»Π° Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π°.

Настройка компилятора ΠΈ систСмы сборки

Для сборки curllib ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Visual Studio Tools. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сборка осущСствляСтся, прСимущСствСнно, ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ систСмы сборки. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ строку ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΆΠ°Π² ΠΊΠ½ΠΎΠΏΠΊΡƒ "Π‘Ρ‚Π°Ρ€Ρ‚" -> "Visual Studio 2013" -> "Visual Studio Tools" ΠΈ Π²Ρ‹Π±Ρ€Π°Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ скрипт. Для Visual Studio 2013 ΠΈ x86 (32-Π±ΠΈΡ‚Π°) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"" x86

Настройка ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния для Visual Studio 2019 для native-компилятора x64 осущСствляСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ сборкС

Π‘Π±ΠΎΡ€ΠΊΠ° curllib.lib Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Microsoft Windows осущСствляСтся ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ "\winbuild". ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ сборки Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ описаны Π² Ρ„Π°ΠΉΠ»Π΅ "BUILD.WINDOWS.txt". Π’ частности указываСтся, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΏΠ°ΠΏΠΊΠ΅ deps, находящСйся Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‡Ρ‚ΠΎ ΠΈ исходныС тСксты curl:

   somedirectory\
    |_curl-src
    | |_winbuild
    |
    |_deps
      |_ lib
      |_ include
      |_ bin

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ строгоС - ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚Π°Ρ€ΠΈΠΈ openssl ΠΈ zlib ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ ошибкС сборки - Ρ„Π°ΠΉΠ» "zlib.h" Π½Π΅ Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½. Π‘Π°ΠΌΠ° структура ΠΏΠ°ΠΏΠΎΠΊ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ собраны.

Π‘Π±ΠΎΡ€ΠΊΠ° openSSL

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΎ сборкС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ openSSL ΠΏΠΎΠ΄ Windows ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ "NOTES.WIN". Π’Π°ΠΊΠΆΠ΅ доступна инструкция Π½Π° Wiki

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ условия (Prerequisites)

Для сборки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Perl, Ρ‚.ΠΊ. выполняСмый скрипт сборки ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° гСнСрируСтся посрСдством Perl-скрипта. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ openSSL Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Strawberry Perl, Π½ΠΎ этот инструмСнт Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚, Π² Ρ‚ΠΎΠΌ числС компилятор gcc. Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ прСдлагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ActiveState Perl, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ классифицируСтся ΠΊΠ°ΠΊ Enterprise-инструмСнт ΠΈ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ подписку Π½Π° новости.

ЀактичСски, для сборки Π±Ρ‹Π» использован Strawberry Perl.

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Perl, трСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Netwide Assembler - компилятор Assembler-Π° для x86/x64. Для установки трСбуСтся Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ инсталлятор NASM с администраторскими привСлСгиями. 32-битная вСрсия устанавливаСтся Π² ΠΏΠ°ΠΏΠΊΡƒ "c:\Program Files (x86)\NASM"

ДСйствия ΠΏΠΎ сборкС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ скрипта сборки слСдуСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ %PATH% ΠΏΡƒΡ‚ΡŒ ΠΊ компилятору NASM. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ NASM доступСн Π² исходных тСкстах Π½Π° GitHub. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ NASM ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ сборкой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ: set PATH=%PATH%;"c:\Program Files (x86)\NASM

ГСнСрация скрипта сборки осущСствляСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ: perl Configure VC-WIN64A (для получСния 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ) ΠΈ perl Configure VC-WIN32 (для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ). Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ no-shared

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ DEBUG-Π²Π΅Ρ€ΡΠΈΡŽ, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ --debug. Для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сборки, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ no-tests для ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚ сборки ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ для тСстирования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ допускаСт использования Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ threads/no-threads, zlib ΠΈ zlib-dynamic. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ установлСн Ρ„Π»Π°Π³ no-zlib. ΠŸΡ€ΠΈ использовании Ρ„Π»Π°Π³Π° zlib, слСдуСт Ρ‚Π°ΠΊ ΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ΠΈ: --with-zlib-include=[path to zlib headers] --with-zlib-lib=[path to zlib static library]

Π¦Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ zlib - допускаСтся сТатиС ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ сниТаСт Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π² 2-3 Ρ€Π°Π·Π°.

Π£ΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΡŒ формирования ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ подтвСрТдаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ тСстовым сообщСниСм Π² консоли:

**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***

Π‘Π±ΠΎΡ€ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ осущСствляСтся посрСдством ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ nmake. ΠŸΡ€ΠΎΡ†Π΅ΡΡ сборки Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΊΠΎΠ»ΠΎ 30 ΠΌΠΈΠ½ΡƒΡ‚ Π½Π° Intel Core i5 3xxx.

Π’ соотвСтствии с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ инструкциСй, послС сборки слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ nmake test, которая запускаСт unit-тСсты. Команда nmake install позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² openSSL (административных ΡƒΡ‚ΠΈΠ»ΠΈΡ‚) Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС.

Π‘Π±ΠΎΡ€ΠΊΠ° Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ (июль 2022)

На дискС "e" Π±Ρ‹Π»Π° создана ΠΏΠ°ΠΏΠΊΠ° "e:\curlsrc", Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ созданы ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠΈ "curl" ΠΈ "deps".

Π¨Π°Π³ 1 - Π‘Π±ΠΎΡ€ΠΊΠ° Zlib

Для сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ΄ Microsoft Windows рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подходящий solution ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ \zlib\contrib\vstudio. Доступны solution для Visual Studio 2008-2015. Однако, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ solution \zlib\contrib\vstudio\vc12\zlibvc.sln оказалась Π½Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ:

1>  crc32.c
1>..\..\..\crc32.c(1089): error C2708: 'crc32_combine64' : actual parameters length in bytes differs from previous call or reference
1>          ..\..\..\crc32.c(1072) : see declaration of 'crc32_combine64'
1>..\..\..\crc32.c(1106): error C2708: 'crc32_combine_gen64' : actual parameters length in bytes differs from previous call or reference
1>          ..\..\..\crc32.c(1093) : see declaration of 'crc32_combine_gen64'
1>..\..\..\crc32.c(1111): error C2373: 'crc32_combine_op' : redefinition; different type modifiers
1>          e:\sources\curlbuild\zlib\zlib.h(1768) : see declaration of 'crc32_combine_op'

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ zlib ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅ собранныС Ρ„Π°ΠΉΠ»Ρ‹ с рСсурса

Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ со сборкой - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ австралийца КСльвина Π›ΠΈ. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для сборки Multithreading ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ срСдствами Visual Studio 2013 слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ solution \zlib-win-build\build-VS2013-MT

Π‘Π±ΠΎΡ€ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² libz ΠΈ libz-static ΠΈΠ· исходников КСльвина Π›ΠΈ Π±Ρ‹Π»Π° ΡƒΡΠΏΠ΅ΡˆΠ½Π°. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±Ρ‹Π»ΠΈ скопированы Π² ΠΏΠ°ΠΏΠΊΠΈ 'deps/lib' ΠΈ 'deps/include' соотвСтствСнно.

Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ сборки Curl Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» zlibstat.lib Π² zlib_a.lib.

Update 2023 October: для ускорСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована рСализация с ассСмблСрными вставками (см. ΠΊΠ»ΡŽΡ‡ΠΈ ASMV ΠΈ ASMINF). ΠŸΡ€ΠΈ смСшивании Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€Π°ΠΌΠΊΠ°Ρ… solution-Π° ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сборки. НапримСр, ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ boost с ΠΈΠ½Ρ‚Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ zlib Π±Π΅Π· ассСмблСрного ΠΊΠΎΠ΄Π°, Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»Ρ‹, оТидания, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с ассСмблСрными вставками. На эту ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ zlib слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ - Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΌΡ‹ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ.

Π¨Π°Π³ 2 - Π‘Π±ΠΎΡ€ΠΊΠ° openSSL

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ сборкС openSSL:

git clone https://github.com/openssl/openssl.git
git checkout openssl-3.0
cd openssl
"c:\Program Files (x86)\NASM\nasmpath.bat"
%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
perl Configure VC-WIN32 no-shared no-tests
nmake

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠ· рСпозитария ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π° ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Π°Ρ, Π° Π½Π΅ developer-сборка, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована ΠΊΠΎΠΌΠ°Π½Π΄Π°: git branch

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° рСпозитария осущСствляСтся 5-10 ΠΌΠΈΠ½ΡƒΡ‚, Π° сборка openSSL Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΊΠΎΠ»ΠΎ 30 ΠΌΠΈΠ½ΡƒΡ‚.

Команда сборка DEBUG-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:

perl Configure VC-WIN32 no-shared no-tests --debug

Ошибка сборки openssl 3.0.1-dev с zlib

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли скрипт сборки Π±Ρ‹Π» сгСнСрирован ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Ρ‚ΠΎ сборка Ρ€Π°Π·Π²Π°Π»ΠΈΠ²Π°Π»Π°ΡΡŒ с ошибкой:

perl Configure VC-WIN32 no-shared no-tests zlib --with-zlib-include=e:/curlsrc/deps/include --with-zlib-lib=e:/curlsrc/deps/lib

Π’Ρ‹Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ошибка:

cmd /C ""link" /nologo /debug /dll  /nologo /debug @C:\Users\M2DFC~1.ROZ\AppData\Local\Temp\nm6D48.tmp || (DEL /Q legacy.* providers\legacy.* & EXIT 1)"
LINK : fatal error LNK1104: cannot open file 'e:\curlsrc\deps\lib.obj'
НС удаСтся Π½Π°ΠΉΡ‚ΠΈ e:\curlsrc\openssl\legacy.*
NMAKE : fatal error U1077: 'cmd' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\nmake.exe"' : return code '0x2'
Stop.

ΠŸΡ€ΠΈ этом, Ρ„Π°ΠΉΠ»Ρ‹ libcrypto.lib ΠΈ libssl.lib Π±Ρ‹Π»ΠΈ собраны ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² ΠΏΠ°ΠΏΠΊΠ΅ e:\curlsrc\openssl.

Однако, Π±Ρ‹Π»ΠΎ принято Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ openssl Π±Π΅Π· zlib.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сборки

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ сборки ΡΠ²Π»ΡΡŽΡ‚ΡΡ статичСскиС ΠΈ динамичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹Π΅ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π€Π°ΠΉΠ»Ρ‹, относящиСся ΠΊ динамичСской Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ΅:

  1. libcrypto.lib
  2. libssl.lib
  3. libcrypto-3.dll
  4. libssl-3.dll

Π€Π°ΠΉΠ»Ρ‹ относящиСся ΠΊ статичСской Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ΅:

  1. libcrypto_static.lib
  2. libssl_static.lib

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сборки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΠ°ΠΏΠΊΡƒ "lib" Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΏΠΊΠΈ "openssl". Π­Ρ‚ΠΎ дСйствиС являСтся ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ΠΌ, Ρ‚.ΠΊ. скрипт сборки libcurl Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΠ°ΠΏΠΊΠ΅, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ SSL_PATH ΠΈ Ссли Ρ‚Π°ΠΌ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ„Π°ΠΉΠ»Π° "libssl.lib", Ρ‚ΠΎ систСма Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅ΠΉ слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΡƒ Π½Π΅ с Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ openssl (libcrypto.lib, libssl.lib), Π° с ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ вСрсий 1.0.2 ΠΈ Π½ΠΈΠΆΠ΅ (libeay32.lib, ssleay32.lib). Для ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, скрипт сборки "MakefileBuild.vc" содСрТит Π²ΠΎΡ‚ Ρ‚Π°ΠΊΡƒΡŽ строку:

!IF "$(WITH_SSL)"=="dll" || "$(WITH_SSL)"=="static"
!IF EXISTS("$(SSL_LIB_DIR)\libssl.lib")
SSL_LIBS     = libssl.lib libcrypto.lib
!ELSE
SSL_LIBS     = libeay32.lib ssleay32.lib
!ENDIF

Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΏΠΊΠ° include Π² openSSL ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ.

Π¨Π°Π³ 3 - Π‘Π±ΠΎΡ€ΠΊΠ° Curl

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ тСксты Π±Ρ‹Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git clone https://github.com/curl/curl

ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ сборки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ скрипт buildconf.bat. Π’ числС ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, этот скрипт сгСнСрируСт Ρ„Π°ΠΉΠ» curl\src\tool_hugehelp.c, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сборка Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ.

Π‘Π±ΠΎΡ€ΠΊΠ° curllib.lib осущСствляСтся ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ "\winbuild" ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

nmake /f Makefile.vc mode=static DEBUG=no WITH_ZLIB=static ZLIB_PATH=e:\curlsrc\deps WITH_SSL=static SSL_PATH=e:\curlsrc\openssl ENABLE_SSPI=yes ENABLE_IPV6=no ENABLE_IDN=no ENABLE_WINSSL=yes

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "mode" опрСдСляСт Ρ‚ΠΈΠΏ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ (dll, статичСская Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ°). Π€Π»Π°Π³ "DEBUG" позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ слСдуСт ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ (Debug/Release). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ WITH_ZLIB ΠΈ ZLIB_PATH ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ Zlib ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ исходникам. А ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ WITH_SSL ΠΈ SSL_PATH - Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ openSSL ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ исходникам.

SSPI это Security Support Provider Interface, интСрфСйс Microsoft Windows, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Π·Π°Π΄Π°Ρ‡ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π² Ρ‚ΠΎΠΌ числС, ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌ NTLM, Kerberos. Π§Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для доступа Π² ΡΠ΅Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Proxy-сСрвСра. Π£ΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ использования SSPI ΠΌΠΎΠΆΠ½ΠΎ посрСдством Ρ„Π»Π°Π³Π° ENABLE_SSPI. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ этот Ρ„Π»Π°Π³ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ использования Schannel (ΠΈΠ· Windows SSPI), которая являСтся Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ SSL Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π² Windows. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, openSSL Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ SSL backend Π² соврСмСнных прилоТСниях.

Curl ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ IPv4, Π½ΠΎ ΠΈ ΠΏΠΎ IPv6, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΎ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Ρ„Π»Π°Π³Π° ENABLE_IPV6.

*ВСроятно, опция ENABLE_WINSSL ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΡ‚Π·Ρ‹Π²Π° сСртификатов, ΠΏΡ€ΠΈ https-соСдинСнии, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° установлСно Π² yes.

Π€Π»Π°Π³ ENABLE_IDN ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ IDN - international domain names, Ρ‚.Π΅. ΠΈΠΌΡ‘Π½ рСсурсов Π½Π° Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языках.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ENABLE_SSPI, ENABLE_IPV6 ΠΈ ENABLE_WINSSL, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, установлСны Π² yes - этот Ρ„Π°ΠΊΡ‚ΠΎΡ€ слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ сборкС прилоТСния.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сборки находится Π² ΠΏΠ°ΠΏΠΊΠ΅: \curl\builds.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ сборки ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Настройки ΠΏΡƒΡ‚ΠΈ ΠΊ include-Ρ„Π°ΠΉΠ»Π°ΠΌ:

alt text

Π’ случаС, Ссли curllib.lib Π±Ρ‹Π»Π° собрана ΠΊΠ°ΠΊ статичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ CURL_STATICLIB:

alt text

Настройка ΠΏΡƒΡ‚ΠΈ ΠΊ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ:

alt text

Бписок ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (libcurl_a.lib;libcrypto.lib;libssl.lib;zlib_a.lib;crypt32.lib;Wldap32.lib;ws2_32.lib):

alt text

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ замСчания

Π’Π°ΠΆΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π² случаС, Ссли curllib.lib Π±Ρ‹Π»Π° собрана ΠΊΠ°ΠΊ статичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ define CURL_STATICLIB.

Бостав Π»ΠΈΠ½ΠΊΡƒΠ΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ:

  1. \curl\libcurl.lib - рСализация сСтСвых ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² (HTTP/HTTPS/FTP ΠΈ Ρ‚.Π΄.)
  2. \zlib\zlib.lib - ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°/распаковка Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ²
  3. \openssl\libcrypto.lib, \openssl\libssl.lib - рСализация криптографичСских Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²
  4. ws2_32.lib - TCP/IP
  5. crypt32.lib - доступ ΠΊ сСртификатам Windows
  6. Wldap32.lib - LDAP API, домСнная аутСнтификация (Ссли Π½ΡƒΠΆΠ½ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°)

Π Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ c инструкциСй ΠΎΡ‚ Peter Rekdal Sunde: ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ wsock32.lib, Π½ΠΎ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ crypt32.lib.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ссылки

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° скрипта сборки ΠΏΠΎΠ΄ Windows.

ΠŸΠΎΡ…ΠΎΠΆΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΏΠΎ сборкС Curl Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» Peter Rekdal Sunde.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сСртификатов сСрвСра Π² прилоТСниях с использованиСм curllib, boost.beast, Android-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ C#-ΠΊΠΎΠ΄Π΅.

Для тСстирования ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сСртификаты ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сайт badssl.

Настройка IIS для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ клиСнтского сСртификата.

ГСнСрация сСртификата Π² инфраструктурС PKI.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΎΠ± использовании клиСнтского сСртификата Π² клиСнтских прилоТСниях.

Как обстоят Π΄Π΅Π»Π° с HTTP/3 Π² сURL Π½Π° сСрСдину 2024 Π³ΠΎΠ΄Π° by Bright_Translate.

About

Hands-on with the Curl library using https and custom certificates

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published