web-dev-qa-db-fra.com

Comment compiler OpenSSL sur Windows avec Visual Studio 2017?

J'essaie d'utiliser OpenSSL mais je suis bloqué sur l'étape de la compilation. Le projet OpenSSL a une très mauvaise documentation (mauvaise).

Existe-t-il une aide concrète pour créer la dernière version d'OpenSSL sous Windows avec Visual Studio 2017?

Je n'ai trouvé aucune information utile sur le site officiel OpenSSL. Oui, il y a beaucoup de publications sur Internet sur la compilation OpenSSL, mais toutes sont obsolètes.

6
AeroSun

Je n'ai pas utilisé VS2017 mais les versions précédentes. J'imagine que c'est à peu près la même chose. En bref, les étapes sont les suivantes:

  1. Installez Perl (ActiveState ou Strawberry)

  2. Installer NASM

  3. Assurez-vous que Perl et NASM sont sur votre% PATH%

  4. Lancez une invite de commande Visual Studio Developer avec des privilèges d'administrateur (veillez à utiliser celle 32 bits si vous construisez OpenSSL 32 bits ou la version 64 bits si vous créez OpenSSL 64 bits)

  5. À la racine du répertoire source OpenSSL, entrez Perl Configure VC-WIN32 si vous souhaitez utiliser OpenSSL 32 bits ou Perl Configure VC-WIN64A si vous souhaitez utiliser OpenSSL 64 bits.

  6. Entrez nmake

  7. Entrez nmake test

  8. Entrez nmake install

Si quelque chose ne va pas à un moment quelconque, vérifiez le fichier INSTALL et le fichier NOTES.WIN .

19
Matt Caswell

Pour OpenSSL 1.0.2, j'ai écrit un script Python qui construit le bâtiment pour moi. J'ai l'habitude de faire ces scripts, car je n'aime pas réinventer la roue chaque fois que j'ai besoin de construire quelque chose.

Le script est fait pour OpenSSL 1.0.2. Les changements sont probablement minimes pour OpenSSL 1.1.0.

Voici le script:

import os
from subprocess import call
import sys
import re

vs_version = "140"
compile_flags = "-no-asm -no-shared"


openssl_32_flag = "VC-WIN32"
openssl_64_flag = "VC-WIN64A"

src_32_suffix = "_" + "vs" + vs_version + "_32"
src_64_suffix = "_" + "vs" + vs_version + "_64"

vs_tools_env_var = "VS" + vs_version + "COMNTOOLS"

if len(sys.argv) < 2:
    print("First argument must be the tar.gz file of OpenSSL source")
    exit(1)

if len(sys.argv) < 3:
    print("Second argument must be 32 or 64")
    exit(1)

filename = sys.argv[1]
dirname  = filename.replace(".tar.gz","")
working_dir = os.getcwd()
Arch = sys.argv[2]

if Arch != "32" and Arch != "64":
    print("Second argument must be 32 or 64")
    exit(1)


if not bool(re.match("(openssl-){1}(\d)+(.)(\d)+(.)(\d)+(\w)+(.tar.gz)",filename)):
    print("The file given doesn't seem to be an openssl source file. It must be in the form: openssl-x.y.zw.tar.gz")
    exit(1)


call("7z x " + filename) #extract the .gz file

dirname_src_32 = dirname + src_32_suffix
dirname_src_64 = dirname + src_64_suffix
dirname_bin_32 = dirname + src_32_suffix + "_build"
dirname_bin_64 = dirname + src_64_suffix + "_build"

openssl_tar_file = filename[0:-3]

if Arch == "32":
#extract tar file for 32
    call("7z x " + openssl_tar_file)
    os.rename(dirname, dirname_src_32)

#Compile 32
    os.chdir(dirname_src_32)

    call("Perl Configure " + openssl_32_flag + " --prefix=" + os.path.join(working_dir,dirname_bin_32) + " " + compile_flags,Shell=True)
    call(r"ms\do_ms.bat",Shell=True)
    call(r"nmake -f ms\nt.mak",Shell=True)
    call(r"nmake -f ms\nt.mak instalL",Shell=True)

    print("32-bit compilation complete.")

#Go back to base dir
os.chdir(working_dir)
################

if Arch == "64":
#extract for 64
    call("7z x " + openssl_tar_file)
    os.rename(dirname, dirname_src_64)

#Compile 64
    os.chdir(dirname_src_64)

    call("Perl Configure " + openssl_64_flag + " --prefix=" + os.path.join(working_dir,dirname_bin_64) + " " + compile_flags,Shell=True)
    call(r"ms\do_ms.bat",Shell=True)
    call(r"nmake -f ms\nt.mak",Shell=True)
    call(r"nmake -f ms\nt.mak instalL",Shell=True)

    print("64-bit compilation complete.")

#Go back to base dir
os.chdir(working_dir)
################

os.remove(openssl_tar_file)

Option 1 : Enregistrez le script dans CompileOpenSSL.py et téléchargez le fichier source OpenSSL dont le nom est au format openssl-1.X.Y.tar.gz. En supposant maintenant que 7Zip et Perl sont accessibles à partir de la portée globale de votre invite de commande et que vous avez chargé les variables MSVC correctes (avec par exemple vsvars32.bat ou en démarrant le bon terminal), exécutez ce qui suit:

python CompileOpenSSL.py openssl-1.X.Y.tar.gz 32

Si vous utilisez MSVC 32 bits, ou 

python CompileOpenSSL.py openssl-1.X.Y.tar.gz 64

pour MSVC 64 bits.

Option 2 : Faites ce que le script fait manuellement. Le script extrait simplement l'archive, configure les sources et exécute do_ms.bat puis nmake. Suivez la source et ça va marcher.

Bonne chance!

1
  1. allez dans le répertoire ssl en utilisant visual studio cmd et ajoutez Perl et nasm au chemin système

  2. Perl Configure --openssldir=D:OpenSSLdirectory VC-WIN32

  3. ms\do_ms.bat

  4. nmake -f ms\ntdll.mak

  5. nmake -f ms\ntdll.mak install

  6. ( prendre plaisir. )