@ECHO OFF
chcp 650001
SETLOCAL
echo "** GERANDO CERTIFICADO PARA O ITAU **"
echo %~dp0
REM Desenvolvido por L2 SOLUCOES TECNOLOGICAS LTDA
set BASE_DIR=%~dp0

REM FIXO
set OPENSSL_CONF=%BASE_DIR%\BIN\openssl.cnf
set OPENSSL=%BASE_DIR%\BIN\openssl.exe
set PATH=%BASE_DIR%\BIN\;%PATH%


REM Variaveis informada pelo usuário
set CLIENT_ID=
set CIDADE=
set UF=
set SITE=

set /P CLIENT_ID="Digite o CLIENT_ID fornecido pelo Itau: "
IF "%CLIENT_ID%" == "" GOTO USOINCORRETO



set KEYFILE=%~dp0CERTIFICADOS\%CLIENT_ID%.key
set CERFILE=%~dp0CERTIFICADOS\%CLIENT_ID%.cer
set PFXFILE=%~dp0CERTIFICADOS\%CLIENT_ID%.pfx
set CSRFILE=%~dp0CERTIFICADOS\%CLIENT_ID%.csr
echo ""
echo ===============================================================================================================================================
echo Chave privada (*.KEY)            : %KEYFILE%
echo Solicitacao de assinatura (*.CSR): %CSRFILE%
echo Certificado (*.CER)              : %CERFILE%
echo ===============================================================================================================================================
echo ""

REM Comandos
:MENU
set COMANDO=
echo Digite uma das opções:
echo " 'CSR' - para gerar a chave (*.KEY) e a requisição de assinatura (*.CSR);"
echo " 'PFX' - Para gerar converter o *.CER + *.KEY em *.PFX;"
echo " 'PUB' - Para gerar uma chave auto assinada e converter em *.CER + *.KEY em *.PFX;"
echo " 'FIM' - Para sair deste programa."
set /P COMANDO="Digite CSR, PFX ou FIM para prosseguir: "
IF "%COMANDO%" == "CSR" GOTO GERARCSR
IF "%COMANDO%" == "PFX" GOTO CRIARPFX
IF "%COMANDO%" == "PUB" GOTO GERARPUB
IF "%COMANDO%" == "FIM" GOTO FIM
GOTO USOINCORRETO

:GERARCSR
echo Gerando o KEY e CSR...
IF EXIST %KEYFILE% (
  echo Arquivo %KEYFILE% já existe. Não pode ser recriado. Se necessário remova-o ou delete manualmente.
  GOTO MENU
)
set /P CIDADE="Digite o CIDADE do CLIENTE (Sem acentos): "
IF "%CIDADE%" == "" GOTO USOINCORRETO
set /P UF="Digite o UF do CLIENTE: "
IF "%UF%" == "" GOTO USOINCORRETO
set /P SITE="Digite o SITE ou nome do APP do CLIENTE (Sem acentos): "
IF "%SITE%" == "" GOTO USOINCORRETO

REM %OPENSSL% genrsa -out %NOME%.key 2048 -passout pass:%SENHA%
%OPENSSL% req -new -subj "//CN=%CLIENT_ID%\OU=%SITE%\L=%CIDADE%\ST=%UF%\C=BR" -out %CSRFILE% -nodes -sha512 -newkey rsa:2048 -keyout %KEYFILE%

echo Chave privada gerada: %KEYFILE%
echo CSR gerado: %CSRFILE%, envie este arquivo para o banco.

GOTO MENU


:VERIFICAReCRIARPFX

IF EXIST %KEYFILE% (
  GOTO VERIFICACER
)
ECHO "Arquivo KEY não encontrado: %KEYFILE%.
timeout /t 30
GOTO MENU

:VERIFICACER
IF EXIST %CERFILE% (
  GOTO CRIARPFX
)

echo Arquivo %CERFILE% não encontrado. Copie o arquivo para o local indicado e tente novamente.
timeout /t 30
GOTO MENU

:CRIARPFX


IF EXIST %CERFILE% (
  GOTO CRIARPFX2
)
set /P CERFILE="Digite o caminho completo do CERTIFICADO (.CER ou *.CRT): "
:CRIARPFX2
IF EXIST %KEYFILE% (
  GOTO GERARPFX3
)
set /P KEYFILE="Digite o caminho completo da CHAVE PRIVADA (*.KEY): "

set /P SENHA="Digite a senha do PFX a ser gerado: "
:GERARPFX3
echo Gerando o PFX...
%OPENSSL% pkcs12 -export -in "%CERFILE%" -inkey "%KEYFILE%" -out "%PFXFILE%-LEGADO.pfx" -passout pass:%SENHA% -legacy -provider-path %BASE_DIR%\BIN\
%OPENSSL% pkcs12 -export -in "%CERFILE%" -inkey "%KEYFILE%" -out "%PFXFILE%-3DES.pfx" -passout pass:%SENHA% -descert
%OPENSSL% pkcs12 -export -in "%CERFILE%" -inkey "%KEYFILE%" -out "%PFXFILE%-AES256.pfx" -passout pass:%SENHA% -aes256

echo Arquivo PFX gerado em: %PFXFILE%
GOTO FIM

:GERARPUB
echo Gerando uma chave publica e privada...
IF EXIST %KEYFILE%.pem (
  echo Arquivo %KEYFILE%.pem já existe. Não pode ser recriado. Se precisar remova-o ou delete manualmente.
  GOTO MENU
)

%OPENSSL% genpkey -out %KEYFILE%.pem -algorithm RSA -pkeyopt rsa_keygen_bits:2048
%OPENSSL% rsa -in %KEYFILE%.pem -pubout -out %CERFILE%.pem
echo Arquivo CER (%CERFILE%) e KEY (%KEYFILE%) gerados.

GOTO FIM


:USOINCORRETO
echo "Dados incorretos."
timeout /t 60
GOTO MENU

:FIM
ECHO "FIM!"
timeout /t 90