MQ 보안 인증서 연장 Db2

복제에 사용되는 IBM® MQ 보안 인증서의 수명을 기본값인 3년에서 100년으로 연장하여 인증서가 만료되지 않도록 하고 복제가 계속되지 않도록 할 수 있습니다.

이 태스크에 대한 정보

자체 서명된 MQ TLS(전송 계층 보안) 인증서는 내부적으로 소스에서 대상으로 데이터를 전송하는 데 사용됩니다. 기본적으로 MQ 인증서의 만료 기간은 SSL Db2 인증서와 일치하도록 3년입니다. 그러나 복제가 활성 상태인 동안 MQ 인증서가 만료되면 MQ 큐의 데이터를 복구할 수 없으며 모든 복제 대상 테이블을 전체 새로 고침해야 합니다.

다음 프로시저는 이러한 상황을 방지하기 위해 MQ 인증서의 수명을 연장합니다.

프로시저

  1. 다음 단계에 따라 소스 시스템에서 모든 송신 큐를 중지하십시오.
    1. 다음 SQL 문을 사용하여 복제 메타데이터에 있는 송신 큐의 상태를 비활성(I)으로 설정하십시오.
      update qasn.ibmqrep_sendqueues set state='I'
    2. 캡처 프로그램 스레드의 이름을 찾으십시오.
      ps -ef|grep asnqcap
      다음 예제에서 스레드(capture_server) 이름은 FRKJKKDZ입니다.
      dsadm    1576952 1576022  1 10:22 pts/3    00:01:08 /opt/ibm/db2/V11.5.0.0/bin/asnqcap capture_server=FRKJKKDZ capture_schema=QASN capture_path=/mnt/blumeta0/bludr/logs/replication xf_del_file=y qfull_retry_delay=60000 qfull_num_retries=1000 max_capstarts_intload=5 term=n use_stream_trans=y startallq=n
    3. 캡처 프로그램을 다시 초기화하여 송신 큐 상태가 변경되도록 하십시오.
      asnqccmd capture_server=FRKJKKDZ capture_schema=QASN reinit
  2. 대상 시스템에서 다음 단계를 수행하여 모든 수신 큐가 비어 있는지 확인하십시오.
    1. MQ 명령 dspmq을 실행하여 큐 관리자의 이름을 찾으십시오.

      이 출력에서 큐 관리자 이름은 AOMTDBXP_AQM입니다.

      QMNAME(AOMTDBXP_AQM)      STATUS(Running)
    2. 다음 명령을 실행하여 모든 수신 큐의 현재 깊이(메시지 수)가 0인지 확인하십시오.
      runmqc AOMTDBXP_AQM
      DISPLAY QLOCAL(*) CURDEPTH

      출력에 CURDEPTH 값으로 0이 표시됩니다.

      20 : DISPLAY QLOCAL(*) CURDEPTH
      AMQ8409I: Display Queue details.
         QUEUE(SET10001_RECVQ)                   TYPE(QLOCAL)
         CURDEPTH(0)
      AMQ8409I: Display Queue details.
         QUEUE(SET10001_RECVQ_FT)                TYPE(QLOCAL)
         CURDEPTH(0)
      AMQ8409I: Display Queue details.
         QUEUE(SET10001_RECVQ_FT.2)              TYPE(QLOCAL)
         CURDEPTH(0)
      AMQ8409I: Display Queue details.
         QUEUE(SET10001_RECVQ_FT.3)              TYPE(QLOCAL)
         CURDEPTH(0)
      AMQ8409I: Display Queue details.
         QUEUE(SET10001_RECVQ_FT.4)              TYPE(QLOCAL)
         CURDEPTH(0)
  3. 소스 시스템에서 다음 단계를 수행하여 ADMINQ, ACKFT 및 XMITQ 큐가 비어 있는지 확인하십시오.
    1. IBM MQ 명령 dspmq을 실행하여 큐 관리자의 이름을 찾으십시오.

      이 출력에서 큐 관리자 이름은 FRKJKKDZ_CQM입니다.

      QMNAME(FRKJKKDZ_CQM)      STATUS(Running)
      
    2. 다음 명령을 실행하여 모든 로컬 큐의 현재 깊이(메시지 수)가 0인지 확인하십시오.
      runmqsc FRKJKKDZ_CQM
      DISPLAY QLOCAL(*) CURDEPTH

      출력에 ADMINQ, ACKFT, XMITQ 큐 및 기타 로컬 큐에 대한 CURDEPTH 값으로 0이 표시됩니다.

      1 : DISPLAY QLOCAL(*) CURDEPTH
      AMQ8409I: Display Queue details.
         QUEUE(FRKJKKDZ_ADMINQ)                  TYPE(QLOCAL)
         CURDEPTH(0)
      AMQ8409I: Display Queue details.
         QUEUE(SET10001_ACKFT)                   TYPE(QLOCAL)
         CURDEPTH(0)
      AMQ8409I: Display Queue details.
         QUEUE(SET10001_TXQ)                     TYPE(QLOCAL)
         CURDEPTH(0)
      AMQ8409I: Display Queue details.
         QUEUE(SET10001_TXQ_FT)                  TYPE(QLOCAL)
         CURDEPTH(0)
      AMQ8409I: Display Queue details.
         QUEUE(SET10001_TXQ_FT.2)                TYPE(QLOCAL)
         CURDEPTH(0)
      AMQ8409I: Display Queue details.
         QUEUE(SET10001_TXQ_FT.3)                TYPE(QLOCAL)
         CURDEPTH(0)
      AMQ8409I: Display Queue details.
         QUEUE(SET10001_TXQ_FT.4)                TYPE(QLOCAL)
         CURDEPTH(0)
  4. 소스 데이터베이스에서 캡처 프로그램 중지
    1. 캡처 프로세스를 중지하십시오.
      asnqccmd capture_server=FRKJKKDZ capture_schema=QASN stop
    2. asnqcap 스레드가 더 이상 존재하지 않음을 확인하십시오.
      ps -ef|grep asnqcap
  5. 다음 단계를 수행하여 대상 데이터베이스에서 적용 프로그램을 중지하십시오.
    1. 적용 서버의 이름을 찾으십시오.
      ps -ef|grep asnqapp
      다음 예제에서 서버 이름은 AOMTDBXP입니다.
      dsadm    1614543 1614088  0 10:28 pts/3    00:00:18 /opt/ibm/db2/V11.5.0.0/bin/asnqapp apply_server=AOMTDBXP apply_schema=QASN apply_path=/mnt/blumeta0/bludr/logs/replication CDE_FILE_MISSING_TIMEOUT=600 term=n et_load_named_pipe_group_id=3000 startallq=y
    2. 적용 프로세스를 중지하십시오.
      asnqacmd apply_server=AOMTDBXP apply_schema=QASN stop
    3. asnqapp 스레드가 더 이상 존재하지 않음을 확인하십시오.
      ps -ef|grep asnqapp
  6. 다음 컨텐츠를 사용하여 쉘 스크립트 파일을 작성하고 bludr-mq-renew-cert.sh로 저장하십시오.
    #/bin/bash
    
    DECRYPT_PW=$(/opt/ibm/dsserver/scripts/decrypt.sh $(cat ~dsadm/.mqs/kdb.pass))
    DIST_NAME=`grep "MQ_DIST_NAME" /opt/ibm/apiserver/wlp/usr/servers/bludr/server.env`
    DIST_NAME=${DIST_NAME#*=}
    CN_NAME=`grep "MQ_CN_NAME" /opt/ibm/apiserver/wlp/usr/servers/bludr/server.env`
    CN_NAME=${CN_NAME#*=}
    GSKIT_CMD="$(ls -1d /opt/ibm/db2/V*)/gskit/bin/gsk8capicmd_64"
    
    openssl x509 -in ${BLUDR_SHARED_DIR}/certificates/mq_public_cert.arm -text -noout | head -n 10 > ~dsadm/openssl.backup.txt
    cat ~dsadm/openssl.backup.txt
    cp -r ~dsadm/.mqs ~dsadm/.mqsbackup
    rm -f ~dsadm/.mqs/dsadm*
    
    ${GSKIT_CMD} -keydb -create -db ~/.mqs/dsadmkey.kdb -pw ${DECRYPT_PW} -stash
    ${GSKIT_CMD} -cert -create -db ~dsadm/.mqs/dsadmkey.kdb -pw ${DECRYPT_PW} -expire 36500 -label ${CN_NAME} -dn ${DIST_NAME} -default_cert yes
    mv ${BLUDR_SHARED_DIR}/certificates/mq_public_cert.arm ${BLUDR_SHARED_DIR}/certificates/mq_public_cert.arm.backup
    
    ${GSKIT_CMD} -cert -extract -db ~/.mqs/dsadmkey.kdb -pw ${DECRYPT_PW} -label ${CN_NAME} -target ${BLUDR_SHARED_DIR}/certificates/mq_public_cert.arm
    
    openssl x509 -in  ${BLUDR_SHARED_DIR}/certificates/mq_public_cert.arm -text -noout | head -n 10
  7. 소스 및 대상 모두에서 bludr-mq-renew-cert.sh 스크립트를 실행하십시오. 출력에서 두 번째 Validity 섹션을 확인하고 Not After 값이 약 100년 (2121이상) 인지 확인하십시오.
    $ ./bludr-mq-renew-cert.sh
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 3686575169745515400 (0x33295895a674f388)
        Signature Algorithm: sha256WithRSAEncryption
            Issuer: C=US, O=IBM, CN=4818ff96-c9ec-4316-be2a-78ac79d2838d
            Validity
                Not Before: Dec  2 08:20:43 2021 GMT
                Not After : Dec  2 08:20:43 2024 GMT
            Subject: C=US, O=IBM, CN=4818ff96-c9ec-4316-be2a-78ac79d2838d
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 3382945298641481939 (0x2ef2a2d3541a70d3)
        Signature Algorithm: sha256WithRSAEncryption
            Issuer: C=US, O=IBM, CN=4818ff96-c9ec-4316-be2a-78ac79d2838d
            Validity
                Not Before: Dec  4 11:50:32 2021 GMT
                Not After : Nov 11 11:50:32 2121 GMT
            Subject: C=US, O=IBM, CN=4818ff96-c9ec-4316-be2a-78ac79d2838d
  8. 소스 시스템에서 bludr-trust-targets.sh 스크립트를 실행하십시오.
    /opt/ibm/bludr/scripts/bin/bludr-trust-targets.sh add 9.30.43.143 bluadmin bluadmin 9.30.161.62 9444
  9. 소스 및 대상 모두에서 bludr-restart.sh 스크립트를 실행하여 캡처 및 적용 프로그램을 다시 시작하십시오.
    /opt/ibm/bludr/scripts/bin/bludr-restart.sh
  10. 소스 및 대상 모두에서 bludr-status.sh 스크립트를 실행하여 복제 REST 서버가 활성 상태인지 확인하십시오.
    /opt/ibm/bludr/scripts/bin/bludr-status.sh
  11. 다음 단계에 따라 소스 시스템에서 모든 송신 큐를 시작하십시오.
    1. 다음 SQL 문을 사용하여 복제 메타데이터에 있는 송신 큐의 상태를 활성(A)으로 설정하십시오.
      update qasn.ibmqrep_sendqueues set state='A'
    2. 캡처 프로그램을 다시 초기화하여 송신 큐 상태가 변경되도록 하십시오.
      asnqccmd capture_server=FRKJKKDZ capture_schema=QASN reinit