Como construir OpenSSL no Windows com Visual Studio 2017?

Estou a tentar usar o OpenSSL, mas estou preso ao passo de compilar. O projecto OpenSSL tem uma documentação muito pouco amigável (má).

Existe alguma ajuda real para construir a última versão do OpenSSL no Windows com Visual Studio 2017?

Não encontrei nenhuma informação útil no site oficial do OpenSSL. Sim, há um monte de posts na Internet sobre a compilação OpenSSL, mas todos eles são obsoletos.

Author: Remy Lebeau, 2017-08-04

2 answers

Não usei VS2017, mas versões anteriores. Imagino que seja a mesma coisa. Em resumo, os passos são:
  1. Instalar o Perl (ActiveState ou Strawberry))

  2. Instalar o NASM

  3. Certifique - se que o Perl e o NASM estão no seu %PATH%

  4. Acenda uma linha de comandos do programador (certifique-se de que usa a de 32 bits se estiver a construir o OpenSSL de 32 bits ou o OpenSSL de 64 bits se estiver a construir o OpenSSL de 64 bits)

  5. Da raiz da pasta de código OpenSSL enter perl Configure VC-WIN32, se quiser OpenSSL de 32 bits ou perl Configure VC-WIN64A Se quiser OpenSSL de 64 bits

  6. Enter nmake

  7. Enter nmake test

  8. Enter nmake install

Se alguma coisa correr mal em qualquer fase, verifique o ficheiro instale e as notas .Ficheiro WIN.

 14
Author: Matt Caswell, 2018-04-09 09:58:41

Para o OpenSSL 1.0.2, escrevi um script em Python que faz o edifício para mim. Tenho o hábito de fazer estes guiões, porque não gosto de reinventar a roda sempre que preciso de construir alguma coisa.

O programa é feito para o OpenSSL 1.0.2. Provavelmente as alterações são mínimas para OpenSSL 1.1.0.

Aqui está o guião:

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)

Opção 1 : grava o programa para CompileOpenSSL.py e obtém o ficheiro de código OpenSSL que deverá ter o formato de nome openssl-1.X.Y.tar.gz. Agora assumindo que o 7zip e o perl estão acessíveis a partir do âmbito global na sua linha de comandos e que você tem as variáveis MSVC correctas carregadas (com, por exemplo, vsvars32.bat, ou a iniciar o terminal direito), execute o seguinte:

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

Se estiver a utilizar MSVC 32-bit, ou

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

Para MSVC 64 bits.

Opção 2 : faça o que o programa faz manualmente. O programa simplesmente extrai o pacote, configura as fontes e executa do_ms.bat Depois nmake. Segue a fonte e ela trabalhar.

Boa sorte!
 0
Author: The Quantum Physicist, 2017-08-03 21:43:25