Linux Shell에서 인증서 키 라이브러리를 작성하는 패널 관리자

안녕하세요!저는 Sergii라고 하는데 Luxoft에서 소프트웨어 엔지니어/DevOps를 맡고 있습니다.
많은 개발자들이 Linux Shell을 다른 프로그래밍 언어와 비교하여 과소평가하거나 잘못 인용했다.
하지만'Linux Shell'에서 가장 중요한 단어는 Shell이라는 단어를 잊어서는 안 된다.그것은 단순히 프로그램을 작성하는 데 사용되는 프로그래밍 언어가 아니다.
이것은 시스템 엔지니어가 시스템 엔지니어를 위해 작성한 운영체제 케이스로 기능이 강하고 용도가 광범위하며 다른 프로그래밍 언어를 직접 사용하지 않는 상황에서 거의 모든 일상적인 조작을 자동화하고 간소화할 수 있다.
이것은 라이브러리와 함께 실행되지 않고 프로그램과 함께 실행됩니다. (많은 GNU 도구와 사용자가 찾을 수 있는 모든 것을 셸과 쉽게 통합할 수 있습니다.)그것도 프로그래밍 언어의 표준을 따르지 않고 운영체제의 표준을 따른다.따라서 운영 체제가 어떻게 작동하는지에 대한 기본 지식이라도 Linux Shell에 대한 이해를 높일 수 있습니다.

인증서에 관하여.



HTTPS가 일반 표준이 된 이후 거의 모든 항목에서 다음 인증서를 사용했습니다.
  • 누구나 만들 수 있는 인증서
  • 회사 CA
  • 가 발표한
  • Let's Encrypt
  • 의 무료 공용 인증서
  • IdenTrust 또는 DigiCert와 같은 글로벌 CA의 비즈니스 인증서, 그리고 회사 인증이나 정부 인증 등 추가 서비스를 제공하는 인증서
  • tls/ssl 채널을 만드는 인증서, 제3자 서비스에서 권한을 수여하는 인증서, 또는 양방향 tls/ssl을 만드는 인증서
  • 인증서가 많으면 JKS (자바 키 라이브러리, 자바 9이 발표되면서 남겨진 상태) 나 PKCS12 같은 키 라이브러리를 사용하고 있을 가능성이 높습니다.후자는 20년 가까이 사용되었다. 비록 약간의 비판이 있었지만, 그것은 머지않아 JKS의 가장 유행하고 믿을 만한 개방 양식 중 하나를 완전히 뛰어넘을 것이다.
    나는 주요 프로그래밍 언어인 자바 프로젝트에서 많은 일을 했기 때문에 나 자신에게 키 라이브러리를 사용하는 주요 도구는 JDK가 첨부한 키tool이다.
    물론, 나는 작은 메모지가 하나 더 있는데, 위에 다음과 같은 명령이 있다.
    인증서 목록을 표시하려면:
    keytool -list -v -keystore “store.jks” -storepass “password”|grep -P ‘(Alias name:|Entry type:|Serial number:|Owner:|Valid from:)’
    
    # with some filter:
    keytool -list -v -keystore Ltest.jks -storepass changeit 2>/dev/null|grep -P “(Alias:|Owner:|Valid from:)”
    
    인증서를 한 키 라이브러리에서 다른 키 라이브러리로 복사하려면 다음과 같이 하십시오.
    keytool -importkeystore -srckeystore “KEYSTORE_FROM.jks” -srcstorepass “SOURCE_PASSWORD” -destkeystore “KEYSTORE_TO.jks” -deststorepass “DESTINATION_PASSWORD” -srcalias “CERT_ALIAS” [ -destalias “NEW_CERT_ALIAS” ]
    
    인증서를 PEM 파일에서 키 저장소로 가져오려면 다음과 같이 하십시오.
    keytool -import -file “FILE_FROM.pem” -keystore “KEYSTORE_TO.jks” -storepass “KEYSTORE_PASSWORD” -noprompt -alias “CERT_ALIAS”
    
    인증서를 키 라이브러리에서 CRT 파일로 내보내려면 다음과 같이 하십시오.
    keytool -exportcert -v -alias “CERT_ALIAS” -keystore “KEYSTORE_FROM.jks” -storepass “KEYSTORE_PASSWORD” -rfc -file “FILE_TO.cer”`
    
    한 번은 제가 한 프로젝트에 참여했는데 그 중에서 몇 십 개의 마이크로 서비스가 있고 테스트 환경에 수백 개의 가상 기기가 있고 개발자가 수동으로 인증서를 관리하며 집중적으로 제어하지 않았습니다.이 모든 것을 분해하고 특정한 시스템 형식으로 만들기 위해서만 모든 내용을 꼼꼼하게 정리하고 비교하며 몇몇 개발진과 모든 변경 사항을 확인할 필요가 있다.
    인프라 엔지니어로서 나는 이 일을 그다지 좋아하지 않지만, 최초의 관례적인 업무와 이 임무의 낮은 우선순위가 나로 하여금 사방으로 뛰어다니며 다른 임무를 우선적으로 처리하게 했다.
    때때로 나는 도형 도구https://keystore-explorer.org/features.html에 익숙한 신기한 해결 방안을 찾으려고 시도했지만 필요한 기능이 없었고 회사의 정책이 회사의 안전 감사를 통과하지 못한 데스크톱 프로그램을 사용하는 것을 허락하지 않았기 때문에 1년이 걸릴 수도 있다.
    아마도 나는 정신을 차리고 한 줄의 bash 명령 + 노트북 + excel로 1, 2주 안에 모든 일을 끝낼 것이다. 그러나 갑자기 나는 병이 나서 휴가를 낼 수밖에 없었다. 내 체온이 모니터 앞에 다시 앉는 것을 허락했지만 아직 출근하지 않았을 때, 나는 내가 bash에 대해 매우 좋다고 생각했던 것을 기억한다.
    제가 소개하겠습니다.

    콘솔 패널 관리자 두 개는 Linux 셸으로 작성됩니다.


    약 35KB POSIX는 Linux Shell과 호환됩니다.
    일을 하려면 다음과 같은 것이 필요하다.
  • 낡지 않은 케이스(ksh, bash,zsh)
  • 세드, 그레프
  • JDK와 함께 제공되는 키 도구
  • 매니저가 뭘 해?다음 화면 캡처의 빠른 개요:
    단일 패널 모드:

    이중 패널 모드:

    패널 관리자를 좋아하는 사람에게 NC, VC, MC, FAR 등(FAR 관리자 없이는 살 수 없다) 기능키와 내비게이션은 직관적이어야 한다.

    개발 과정에서 가장 흥미로운 것은 다음과 같다.


    처음에 나는 기본 내비게이션과 첫 번째 기능을 포함한 첫 번째 버전을 bash로 작성했지만 어느 정도 ksh가 시작되지 않았다.나는 자신의 잘못을 깨닫고 POSIX 호환성에 유리한 모든 내용을 재편성했다.
    코드가 더 커보이기 시작했지만, 스크립트는 bash/ksh/dash에서 작동합니다.만약 네가 어떤 문제를 발견한다면 평론에 써라.(git bash에서도 작업을 할 수 있지만 성능이 떨어진다).

    폭과 높이를 자동으로 조정합니다.


    거의 모든 버튼이 화면을 완전히 새로 고침하기 때문에 창의 크기를 언제든지 변경할 수 있습니다. 예를 들어 도형화 ssh 클라이언트에 앉아 있으면.임의의 키를 누르면 자동으로 그림을 조정합니다.다른 칼럼을 표시하거나 숨기는 데 며칠이 걸렸다.단일 패널과 이중 패널 모드를 계산하고 조정하며 제목과 텍스트를 서로 다른 공식으로 계산할 필요가 있다.다음은 인증서 별명을 얼마나 잘라야 할지 결정하는 세션입니다​​화면 너비가 전체 이름을 수용할 수 없을 경우:
        WindowWidth=”$(tput cols)”
        if [ -n “$RFILE” ]; then # two-panel
        used=24
        [ -n “$SHOW_TYPE” ] && used=$(( $used+34 ))
        localWidth=$(( ( $WindowWidth — $used ) / 2–1 ))
        if [ $localWidth -ne $aliasWidth ]; then
        aliasWidth=$localWidth
        [ $aliasWidth -lt 1 ] && aliasWidth=1
        clear
        fi
    
        ……………………………………………………………
    
        headerWidth=$(( $aliasWidth + 5 ))
        [ -n “$SHOW_TYPE” ] && headerWidth=$(( $headerWidth + 17 ))
        printf “ store: ${blue}%-$(( $headerWidth ))s${rst}” “$LFILE”
        printf “| store: ${blue}%-$(( $headerWidth -1 ))s${rst}\n” “$RFILE”
        printf “ %-10s” “Valid to”
        [ -n “$SHOW_TYPE” ] && printf “ %-16s” “Storetype”
        printf “ %-${aliasWidth}s |” “Alias”
        printf “ %-10s” “Valid to”
        [ -n “$SHOW_TYPE” ] && printf “ %-16s” “Storetype”
        printf “ %-${aliasWidth}s\n” “Alias”
    

    인쇄할 수 없는 키를 체크합니다(화살표, F1...):


    일부 특수한 키는 서로 다른 수량의 문자가 있을 수 있기 때문에 읽기 명령 하나만 사용해도 부족하다.그러나 몇몇 실험과 구글 검색을 통해read 명령이 밀리초가 무엇인지 이해하는 것을 발견했다.그래서 이 과정은 다음과 같다.
        # Special keypress could take variable amount of characters
        keypress=””
        read -rsN1 keytap
        while [ -n “$keytap” ]; do
        keypress=”${keypress}${keytap}”
        read -sN1 -t 0.01 keytap
        done
    
    현재 $keypress 값을 비교할 수 있습니다​​나는 내 버전이 모든 셸에서 완벽하게 실행될 수 있을지 확실하지 않기 때문에, 만일을 대비해서 대부분의 핫키는 알파벳으로 복제된다.

    여러분과 몇 가지를 공유하고 싶어요.


    현재 내가 자주 사용하는 모든 가장 중요한 함수는 이미 실현되었다. 나는 잠시 쉬었다. 그리고 실제로 나는 bash에서 tput과 네비게이션을 연습하기 위해 스크립트를 쓰기 시작했지만 나는 약간 반했다.)
    간단한 형식으로, 나는 다른 스크립트에서 유사한 내비게이션을 사용했다. 어떤 경우에는 표준 select 명령보다 훨씬 편리하다. 왜냐하면 핫키를 만들고 사용자 정의 목록을 표시할 수 있기 때문이다.
    나는 매우 중요한 순간이 jks 매니저라고 생각한다.sh는 텍스트 스크립트 파일일 뿐입니다.
    혼동이 없고, 코드가 개방되어 있으며, 코드는 가능한 한 간단하다. 거의 모든 초보 개발자/시스템 관리자가 뒷문이 없는지 검사할 수 있다.
    따라서 프로젝트를 처리하고 있는 경우, 프로그램마다 보안 심사, 허가증 검증을 통과해야 하거나, 대상 기기에 도구를 설치할 수 있는 권한이 충분하지 않습니다. 이 스크립트는 사용자에게 매우 유용합니다.POSIX 셸, keytool,sed,grep 명령만 있으면 설치할 필요가 없습니다.
    일부 유감: 자바를 사용하는 습관은 키 라이브러리의 모든 작업을 키tool 명령을 통해 완성하도록 합니다. 이 명령은 PATH에서 사용할 수 있어야 합니다. (Openssl을 통해 작업한 모든 내용을 연구하고 다시 쓸 가치가 있을지도 모릅니까? 댓글에 당신의 생각을 적으십시오.)

    요약:


    마지막으로 너는 통상적으로 약간의 결론을 써야 한다.그래.
    만약 당신이 학습/연습의 즐거움을 누리고 싶다면, 당신에게 유용한 방법을 생각해 보세요.
    만약 당신이 학습/실천에서 이중의 즐거움을 얻고 싶다면, 당신과 다른 사람들에게 모두 유용한 것을 생각해 보세요.
    현재 나의 각본은 회사의 소수의 사람들에게 사용되고 있다.사실 나는 개발자가 아니라 유용하고 필요한 것을 쓸 수 있어서 매우 기쁘다.
    겸사겸사 한마디 하자. 혹시 모르니까.나는 jks 매니저를 성명하고 싶다.sh는 비근무 시간에만 개인 컴퓨터에서 작성합니다:).
    P.P.S.https://github.com/sfkulyk/jks-manager

    좋은 웹페이지 즐겨찾기