chromedriver/selenium 컨테이너에서 .pfx 키 인증이 필요한 사이트에 액세스할 수 있는 dockerfile 작성

R로 WEB 스크레이프, 익숙해지면 히히히 히로라고 쓸 수 있어 정말로 편리합니다.

그래서, 가끔 있어요 제대로 보안하고 계시는 회사 씨.
실로 멋진 일입니다만, 레어 지나 좀처럼 정보가 없었기 때문에 돌파법만 쓰고 싶습니다.

왜 못할까


  • .pfx 인증서 파일을 자동으로 추가하는 방법을 모르겠습니다.
  • 추가 할 수 있었지만 사이트에 액세스 할 때마다 브라우저가 팝업을 엽니 다.

  • 대책은 :



    1. dockerfile 내에서 사용자 레벨로 추가
    2. 크롬 정책에서 인증서 자동 선택 사용

    입니다.

    dockerfile 만들기



    우선은 dockerfile 와 같은 계층에 아래와 같은 파일을 준비합니다.

    /keys_dir.
    key_password.txt - .pfxファイルのパスワードを平文で
    key.pfx
    policy.json - chrome policy 設定ファイル (下記)
    

    Chrome policy 파일의 내용은 이쪽

    policy.json
    {
        "AutoSelectCertificateForUrls": ["{\"pattern\":\"*\",\"filter\":{}}"]
    }
    

    위를 준비했으면 dockerfile을 만듭니다.
    FROM selenium/standalone-chrome-debug
    
    # chrome policy
    COPY keys/policies.json /etc/opt/chrome/policies/managed/
    # key 関連
    COPY keys/* /home/seluser/keys/
    
    # 必要なツールをインストール
    RUN sudo apt-get update
    RUN sudo apt-get install libnss3-tools
    
    # 証明書をユーザに追加
    RUN mkdir -p /home/seluser/.pki/nssdb
    RUN certutil -d /home/seluser/.pki/nssdb -N
    RUN pk12util -d sql:/home/seluser/.pki/nssdb -i /home/seluser/keys/key.pfx -w /home/seluser/keys/key_password.txt
    

    나머지는 원하는 이름으로 빌드합니다.

    build.sh
    docker build --rm --force-rm -t mytools/selenium-withcert .
    

    실행하자.
    나는 다운로드에 사용하는 경우가 많기 때문에 -v로 마운트합니다.

    run.sh
    docker run -d --restart always -v /dev/shm:/dev/shm -p 4444:4444 -p 5900:5900 -v ~/sel_dl:/home/seluser/Downloads --name selenium_cert mytools/selenium-withcert
    

    이상입니다! ! !
    꽤 정보가 없어서 조사하는 고생했습니다.
    언젠가 누군가의 도움이 될 것입니다 ...



    어쩌면 상관 없다고 생각합니다만, 만약 위에서 잘 가지 않았던 분을 위해서,
    참고까지 다른 내가 하고 있는 prefs/args의 설정도 노출해 둡니다.
    (설마의 R입니다.

    RSelenium_chromedriver.R
    chrome_prefs = 
      list(  
        "profile.default_content_settings.popups" = 0L,
        "download.prompt_for_download" = FALSE,
        "download.directory_upgrade" = TRUE,
        "safebrowsing.enabled" = FALSE,
        "safebrowsing.disable_download_protection" = TRUE,
        "acceptSslCerts" = TRUE
      )
    
    chrome_args = 
      c('--ignore-certificate-errors', 
        '--ignore-urlfetcher-cert-requests', 
        '--no-sandbox', 
        '--disable-gpu', 
        '--disable-web-security', 
        '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100')
    
    eCaps_withhead = 
      list(chromeOptions = 
             list(
               prefs = chrome_prefs,
               args = chrome_args )
            )
    
    # 初期化
    remDr <- remoteDriver(
      remoteServerAddr = sel_ip,
      port = sel_port,
      browserName = "chrome",
      extraCapabilities = eCaps_withhead
    )
    

    [EOF]

    좋은 웹페이지 즐겨찾기