Ativar o TLS 1.2 no SAP S/4 HANA as ABAP (1709 no HEC)
Estamos recebendo diversas comunicações da SAP sobre a desativação do TLS 1.0/1.1 no SAP CPI e de como isso poderá afetar a nossa integração. Atualmente o SAP CPI aceita os protocolos na versão 1.0 e 1.1, mas após esse processo, apenas conexões utilizando o 1.2 serão aceitas. Isso pode ser um tremendo problema para quem não se preparar. Em nosso caso, o CPI é utilizado para a integração do S/4 HANA com o CRM da SAP (Hybris, também conhecido como C4C) e isso poderia custar a parada de todas as vendas da empresa.
Como utilizamos um ambiente relativamente novo, nossos produtos estão atualizados, por isso a dor de deixar tudo certo foi menor. Se este não for seu caso, problemas de acesso ao CPI podem começar a partir do dia 30 de setembro.
Aqui irei descrever como fizemos a nossa preparação e, se tudo der certo, após 30 de setembro como está o comportamento dos ambientes.
Para mais detalhes, as seguintes notas foram consultadas:
2923117 - SAP Cloud Platform NEO – TLS 1.2 Migration - How to address problems with old TLS protocol versions in clients of SCP
510007 - Additional considerations for setting up SSL on Application Server ABAP
Um especial agradecimento ao meu grande mestre, Sr Pedro Baroni, que mais uma vez lançou uma luz sobre minhas dúvidas e ao Sr. Isaac que me ajudou a nos testes com sua experiencia.
Verificando o TLS 1.2
Primeiramente precisamos encontrar um site para o teste do TLS 1.2. Eu vou usar o GITHUB para isso. Acesse o endereço https://www.ssllabs.com/ssltest/ e digite o site do github:
Veja que o GITHUB tem suporte ao TLS 1.2 e está desativado o TLS 1.0 e 1.1:
Vamos ao teste para saber como está o seu SAP e se ele está pronto para a mudança. Veja as etapas a seguir:
Instalar o certificado
Precisamos baixar o certificado do GUTHUB para podermos testar a conexão. Para isso, usei o CPI, mas você pode usar um browser qualquer.
Para fazer pelo CPI, acesse o teste de conectividade (Connectivity Test):
Digite o endereço github.com e deixe a porta como 443, com as opções desativadas, conforme a imagem e clique em SEND:
Se obtiver sucesso, você poderá fazer o download dos certificados, clicando neste botão:
Veja que os certificados serão baixados em um arquivo:
Para instalar o certificado no SAP, use a STRUST:
Entre em SSL CLIENT (Anonimo) e importe os dois certificados, não esquecendo de adicioná-los na lista:
Testando o TLS 1.2
Vamos criar um programa ABAP para realizar uma conexão ao site do GITHUB. Para isso, entre na SE38 e digite o seguinte nome e clique em criar:
ZABAPGIT_TEST_SSL
Preencha como segue e clique em gravar:
Deixe no pacote $TMP:
Coloque o seguinte conteúdo:
REPORT zabapgit_test_ssl.
* See https://github.com/larshp/abapGit/
PARAMETERS: p_url1 TYPE swc_value DEFAULT 'https://github.com',
p_url2 TYPE swc_value DEFAULT 'https://api.github.com',
p_id TYPE ssfapplssl DEFAULT 'ANONYM'.
* api.github.com is used when pushing code back to github
SELECTION-SCREEN BEGIN OF BLOCK proxy WITH FRAME.
* proxy settings, fill if your system is behind a proxy
PARAMETERS: p_proxy TYPE string,
p_pxport TYPE string,
p_puser TYPE string,
p_ppwd TYPE string.
SELECTION-SCREEN END OF BLOCK proxy.
START-OF-SELECTION.
PERFORM run USING p_url1.
WRITE: /, '----', /.
PERFORM run USING p_url2.
FORM run USING iv_url TYPE swc_value.
DATA: lv_code TYPE i,
lv_url TYPE string,
li_client TYPE REF TO if_http_client,
lt_errors TYPE TABLE OF string,
lv_error_message TYPE string.
IF iv_url IS INITIAL.
RETURN.
ENDIF.
lv_url = iv_url.
cl_http_client=>create_by_url(
EXPORTING
url = lv_url
ssl_id = p_id
proxy_host = p_proxy
proxy_service = p_pxport
IMPORTING
client = li_client ).
IF NOT p_puser IS INITIAL.
li_client->authenticate(
proxy_authentication = abap_true
username = p_puser
password = p_ppwd ).
ENDIF.
li_client->send( ).
li_client->receive(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
WRITE: / 'Error Number', sy-subrc, /.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
li_client->get_last_error(
IMPORTING
message = lv_error_message ).
SPLIT lv_error_message AT cl_abap_char_utilities=>newline INTO TABLE lt_errors.
LOOP AT lt_errors INTO lv_error_message.
WRITE: / lv_error_message.
ENDLOOP.
WRITE: / 'Also check transaction SMICM -> Goto -> Trace File -> Display End'.
RETURN.
ENDIF.
* if SSL Handshake fails, make sure to also check https://launchpad.support.sap.com/#/notes/510007
li_client->response->get_status(
IMPORTING
code = lv_code ).
IF lv_code = 200.
WRITE: / lv_url, ': ok'.
ELSE.
WRITE: / 'Error', lv_code.
ENDIF.
ENDFORM.
Salve e ative o programa. Execute e veja o resultado:
Note os erros. Para mais detalhes, entre na SMICM e acesse o trace:
Localize as linhas abaixo. Veja que aparecem erros de versão do TSL:
Resolvendo os problemas
Verificar a versão do NETWEAVER
Para prosseguirmos, verifique a sua versão do Netweaver. Para usar o TLS 1.2, a recomendação é utilizar o Netweaver Kernel 74x e mais novos.
Para verificar isso, veja o componente SAP_BASIS:
Verifique no perfil DEFAULT.PFL (RZ10) se existem estes parâmetros. Se existirem, exclua-os:
- ssf/name
- ssf/ssfapi_lib
- sec/libsapsecu
- ssl/ssl_lib
Verificar a SAPCRYPTOLIB
Com estas alterações, verifique a versão da SAPCRYPTOLIB. A
A versão requerida é a CommonCryptoLib 8.4.38, a recomendada é a 8.4.49. para verificar entre na transação SMICM:
Vá para TRACE FILE e selecione Exibir inicio:
Procure por esta linha:
Adicionando o suporte ao TLS 1.2
Entre na transação RZ10 no perfil DEFAULT.PFL:
Adicione o parâmetro ssl/client_ciphersuites com o seguinte valor: 150:PFS:HIGH::EC_P256:EC_HIGH
Reinicie o sistema e repita o teste com o programa ZABAPGIT_TEST_SSL. Veja o resultado agora: