::: 강좌/소스/문서 :::

강좌/소스/문서 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2004-06-16 11:23:15, Hit : 16528, Vote : 2081
 http://www.howto.pe.kr
 [강좌] 유무선 공유기 제작: 802.1x, RADIUS 설치 [4]

// 제  목: 유무선 공유기 제작: 802.1x, RADIUS 설치 [4]
// 작성자: 김영대( http://www.howto.pe.kr )

테스트 환경
   - 호스트 장비(Linux):
        작업 디렉토리: /home/LDS
          쉘 프롬프트: [root@cozylinux]
                   IP: 211.204.72.53

   - 타겟 장비(LDS2000):
    NFS 루트 디렉토리: /home/LDS/LDS2000/External/RootFS/image
          쉘 프롬프트: [root@cozyLDS]
                   IP: 211.204.72.60

무선랜 초창기에 IEEE802.11 표준화 및 개발자들은 SSID와 WEP(Wired Equivalent Privacy) 를
무선 보안 표준으로 제시하였다. 하지만 이것은 무선 랜의 보안성에 심각한 취약성을 보여주며
새로운 대안을 찾게 했다. 또한 AP 에 접속(association)한 사용자의 과금 정책, 사용 제한, 대역 할당
등 중앙 집중적인 사용자 관리가 필요하게 되었다. 그리하여 등장한것이 802.1x 프래임워크 이다.
결국 IEEE802.1x 의 목적은 사용자들이 AP와 같은 NAS 에 접속하기 전에 RADIUS 인증 서버로 부터
사용자 인증을 받은 후 AP 를 사용할 수 있게 하는 것이다.
그러므로 이 문서를 읽기전에 반드시 802.1x 와 RADIUS 서버에 대한 자료를 찾아 충분히 숙지한 후
진행하기 바란다. 특히 현재 Windows 2000/XP 에서 지원하는 EAP 인증 알고리즘은 두가지로
EAP-TLS, PEAP(MD5/MSCHAPv2) 이므로 이 두가지를 중점적으로 살펴보기 바란다.

참고 사이트:
  - http://www.dslreports.com/forum/remark,9286052~mode=flat
  - http://www.missl.cs.umd.edu/wireless/eaptls
  - http://www.freeradius.org/doc/EAPTLS.pdf
  - http://www.impossiblereflex.com/8021x/eap-tls-HOWTO.htm
  - http://www.missl.cs.umd.edu/Projects/wireless/2kclient/2kclient.html

802.1x 의 구성 장비 3가지:
  - Supplicant: 인증 받을 무선 랜카드를 장착한 일반 PC
                (여기서는 Windows 2000 에 802.1x Client 를 설치하여 사용하며 Windows XP 의 경우는
                 이미 설치되어 있다. 불행히도 WIndows 98 이하는 사용할 수 없다)
  - Authenticator: 인증 결과에 따라 네트워크 접근 포트를 제어하는 NSA(Network Access Server 또는 RAS)
                   (여기서는 타켓 장비인 AccessPoint 를 말한다)
  - Authentication Server: 유선으로 NAS(AccessPoint, Bridge, Switch 등등) 에 인증 서비스 제공
                   (여기서는 호스트 장비인 Linux 를 말한다)

설치할 파일 다운:
  - Windows 2000 Patch: 802.1x for Windows 2000 (Windows XP 의 경우는 이미 설치되어 있음)
      http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=6B78EDBE-D3CA-4880-929F-453C695B9637
  - HostAP source (hostap-2002-10-12.tar.gz)
      http://hostap.epitest.fi/releases
  - OpenSSL source (openssl.tar.gz, 현재는 0.9.7d 버전이다)
      http://www.openssl.org
  - freeRADIUS source (freeradius.tar.gz, 현재는 1.0.0-pre1 버전이다)
      http://www.freeradius.org


1.802.1x for Windows 2000 patch 설치 - Supplicant
  Supplicant 로 사용할 일반 PC 에 802.1x for Windows 2000 patch 를 설치 한 후 이를 서비스로 구동
  시켜야 한다. 설치 후 "시작"->"설정"->"제어판"->"관리도구"->"서비스" 에서 "Wireless Configuration"
  항목을 선택한 후 서비스를 "시작" 상태로 만든다. 윈도우즈의 부팅시마다 이것을 자동 시작하게 하려면
  등록 정보에서 시작 유형을 "자동"으로 하면 된다.
  그리고 데스크탑의 "네트워크 환경"의 등록 정보를 선택한 후 무선 랜에 해당하는 "로컬 영역 연결"을
  선택하여 등록 정보를 보면 "인증" 탭이 보일 것이고 그 안에 802.1x 관련 설정 항목들이 보일 것이다.
  세부적인 설정은 아래에 다시 자세히 다룬다.
  참고로 "EAP 종류" 의 "스마트카드 또는 기타 인증서"는 EAP-TLS 를 의미하고,
  "보호된 EAP (PEAP)" 는 클라이언트 인증 방법으로 MD5(MSCHAPv2)를 사용하는 PEAP 를 의미한다.

2.HostAP 의 hostapd 설치 - Authenticator
  hostapd 는 이전에 설치한 HostAP 드라이버와 함께 배포되는 파일로 아마 그 용도를 궁금해 했을것이다.
  지금 당장 HostAP 가 설치되어 있는 디렉토리로 이동하여 hostapd 디렉토리가 있는지 확인하라.
  이 파일이 바로 AP 에서 동작하는 Authenticator 이다. Authenticator 는 단지 Supplicant 와
  Authentication Server 사이에서 EAPOL/EAP over Radius 프래임을 중계하고 Authentication Server 의
  인증 결과에 따라 Supplicant 의 Controlled Port 를 통제하여 AP 로의 결합(association)을 결정한다.

  혹시 이전에 HostAP 를 설치하지 않은 사람을 위해 HostAP 설치 부분을 함께 설명한다.
  다운받은 HostAP 의 압축을 푼 후 디렉토리로 이동한다.(이미 HostAP 를 설치했다면 단지 디렉터리로 이동)
    [root@cozylinux temp]# tar xvfz hostap-2002-10-12.tar.gz
    [root@cozylinux temp]# cd hostap-2002-10-12

  처음에 HostAP 드라이버를 설치하면 드라이버에 hostapd 가 disable 되어 있어 이를 enable 해야 한다
  설정하는 방법은 HostAP 압축울 푼 디렉토리의 driver/modules/hostap_config.h 파일을 열어 다음 두개의
  주석을 풀고 저장한다.
    #define PRISM2_HOSTAPD
    #define PRISM2_DOWNLOAD_SUPPORT

  hostapd 디렉토리로 이동하여 Makefile 을 열어 커널 소스와 gcc 컴파일러를 변경한다
  "KERNEL_PATH" 에는 커널 소스가 있는 디렉토리를 "CC"는 크로스 컴파일러 실행 파일명을 말한다.
    KERNEL_PATH=/home/LDS/LDS2000/kernel-2.4.18
    CC=arm-linux-gcc

  그런 후 컴파일 한다
    [root@cozylinux hostapd]# make clean
    [root@cozylinux hostapd]# make

  지금 컴파일은 호스트 장비에서 타겟 장비를 위해 크로스 컴파일 한 것이므로 컴파일한 hostapd 파일을
  실제 NFS 로 전달해줄 디렉토리(타겟 장비의 NFS Root 디렉토리)의 sbin 에 복사해 준다
    [root@cozylinux hostapd]# cp hostapd /home/LDS/LDS2000/External/RootFS/image/sbin

  HostAP 드라이버에 hostapd 를 enable 시킨 것이므로 이것도 다시 컴파일해준다
    [root@cozylinux hostap-2002-10-12]# make clean
    [root@cozylinux hostap-2002-10-12]# make pccard
    [root@cozylinux hostap-2002-10-12]# make install_pccard

3.OpenSSL 설치 - Authentication Server
  OpenSSL 은 Linux 설치시 보통 함께 설치된다. 이전에 설치된 OpenSSL 이 소스이면 다시 설치할 필요가
  없지만 Redhat 의 binary RPM 처럼 binary 만 설치된 경우는 소스를 추가 설치한다
  (이전에 설치된 binary RPM 은 삭제하지 않고 소스를 설치하는것이 좋다)

  OpenSSL 의 소스를 푼 후 해당 디렉토리로 이동하여 컴파일한다
  아래와 같이 소스를 컴파일하여 /usr/local/openssl 디렉토리에 설치한다
    [root@cozylinux openssl-0.9.7d]# ./config shared --prefix=/usr/local/openssl
    [root@cozylinux openssl-0.9.7d]# make clean
    [root@cozylinux openssl-0.9.7d]# make
    [root@cozylinux openssl-0.9.7d]# make install

  OpenSSL 설치시 화면에 출력되는 로그 메시지들을 나중에 참고하기 위해 저장하는것도 좋은 습관이다
  아래 예처럼 redirection 하여 파일로 정할 수 있다
    [root@cozylinux openssl-0.9.7d]# make > make.log 2>&1

4.freeRADIUS 설치 - Authentication Server
  freeRADIUS 의 소스를 푼 후 해당 디렉토리로 이동하여 컴파일한다
  아래와 같이 소스를 컴파일하여 /usr/local 디렉토리 아래에 설치한다 (/usr/local/etc/raddb 가 생성된다)
    [root@cozylinux freeradius-1.0.0-pre1]# ./configure \
    --with-openssl-includes=/usr/local/openssl/include \
    --with-openssl-libraries=/usr/local/openssl/lib \
    --prefix=/usr/local

5.인증서(cerrificate) 만들기 - Authentication Server
  3종류의 인증서를 만들 차례이다.
  인증서를 만드는 이유는 802.1x 프래임워크에서 인증 알고리즘으로 EAP-TLS, PEAP 를 사용하기 위함이다.
  EAP-TLS, PEAP 모두 양방향 인증 방식으로 Supplicant 는 Authentication Server 를 인증하고 Supplicant는
  Authentication Server 를 인증한다. EAP-TLS 의 경우는 양쪽 다 인증서가 필요하다. 하지만 AP를
  사용할때마다 인증서를 준비해야 하는 Supplicant의 불편을 덜어주고자 나온것이 PEAP 이다.
  PEAP 의 경우 Supplicant는 Authentication Server 의 인증서를 가지고 Authentication Server 를 인증
  하지만 Authentication Server 는 Supplicant 의 UserID/Password 를 보고 Supplicant 를 인증한다.

  그래서 이 인증서를 만들어야 하므로 OpenSSL 이 필요했던것이다.
  OpenSSL 도 내부 동작이 인증서를 사용하는 PKI 요소가 들어가 있으므로 OpenSSL이 제공하는 인증서를
  만드는 유틸리티를 사용하기 위해서이다.

  OpenSSL 을 이용하여 인증서를 만들기 전에 먼저 인증서 생성시 필요한 기본 정보들을 등록해야 한다.
  /usr/local/openssl/ssl 디렉토리에 있는 openssl.cnf 파일을 열어 수정한다.
  다른 항목들은 그냥 놔두고 아래의 "X" 문자가 있는 부분을 수정한다. 혹시 항목이 없다면 해당 위치에
  추가해준다. countryName_default 만 반드시 2글자로 입력하고(예, KR) 나머지는 길이가 넉넉하게 잡혀
  있으므로 의미에 부합되게만 입력한다.
  challengePassword_default 는 인증서 암호이므로 다른 것으로 고치더라도 반드시 메모해둔다.

    countryName_default             = XX
    stateOrProvinceName_default     = XXXXXXXXXXX
    localityName_default            = XXXXXXXXXXX
    0.organizationName_default      = XXXXXXXXXXXXXXXXXXXXXX
    organizationalUnitName_default  = XXXXXXXXXXXXXXXXXXXXXX
    commonName_default              = XXXXXXXXXXX
    emailAddress_default            = XXXXXXXXXXXXXXXXXXXXXX
    challengePassword_default       = whatever

  만들어야할 인증서는 총 3종류이다.
  PEAP의 경우는 Authentication Server 의 인증서만 필요하지만 EAP-TLS는 Supplicant, Authentication Server
  모두 인증서가 필요하다. 이렇게 2개의 인증서는 용도가 분명한데 나머지 하나의 인증서가 궁금해진다.
  이것은 앞의 2개의 인증서를 x.509 형태의 인증서로 만들때 signature 로 사용되는 root CA의 인증서이다.
  보통 root CA 들은 국제적인 공인 기관이고 여기서 배포하는 것이지만 여기서는 자신이 root CA 가 되어
  앞의 2개의 인증서를 공인하는 것이다. 물론 이것은 어디까지나 테스트를 위한 것이다. 실제로는 공인
  root CA 의 인증서를 구입하여 앞의 2개의 인증서를 공인 받아야 하지만 그러면 비용이 든다.

  다행히도 이 3개의 인증서를 한번에 만들어주는 스크립트가 freeRADIUS 디렉토리에 준비되어 있다.
  freeRADIUS 의 압축을 푼 디렉토리 아래의 scripts 디렉토리에 CA.all 파일이 그것이다.
  이 파일을 열어 다음 두줄을 아래와 같이 OpenSSL 설치 디렉토리에 맞게 수정해 준다.
    SSL=/usr/local/openssl
    echo "newreq.pem" | /usr/local/openssl/ssl/misc/CA.pl -newca

  그 다음 아래처럼 실행하면 3개의 인증서를 만드는 과정이 차례대로 진행된다.
    [root@cozylinux scripts]# ./CA.all
  ROOT CA 는 root CA 인증서를,
  client certificate 는 Supplicant 인증서를,
  server certificate 는 Authentication Server 인증서를 의미한다.

  root CA 인증서의 경우는 openssl.cnf 에 적힌 그대로 수정할것이 없으므로 그냥 엔터키를 치고 넘어간다.
  client certificate, server certificate 의 경우는 마찬가지로 거의 수정할것이 없고 단지 구분을 위해서
  commonName 정도는 본인의 이름들로 수정해주는것이 좋다. 나의 경우는 ROOT CA 에 "Young-DAE, Kim CA" 를,
  client certificate 에 "youngdae" 를, server certificate 에 "cozykyd" 라는 commonName 을 주었다.
  그리고 비밀번호는 전부 whatever (또는 openssl.cnf 에서 수정한 비밀번호)를 사용하게 된다.

  생성된 파일은 총 9개로
    root CA 인증서 = root.pem, root.p12, root.der,
    Supplicant 인증서 = cert-clt.pem, cert-clt.p12, cert-clt.der,
    Authentication Server 인증서 = cert-srv.pem, cert-srv.p12, cert-srv.der 이다.

  이 인증서들은 OpenSSL 로 만들어 진것으로 freeRADIUS 에서 사용할 수 있도록 복사해 준다
    [root@cozylinux scripts]# cp *pem *p12 *der /usr/local/etc/raddb/certs

  나중에 다시 애기하겠지만 Supplicant 인증서는 PC 로 다운받아 인증서를 설치해야 한다. 그러기 위해서
  root.der, cert-clt.p12 를 Supplicant 로 사용되는 일반 PC 에 다운받아 설치하게 된다.

6.freeRADIUS 환경 설정 및 실행 - Authentication Server
  먼저 freeRADIUS 가 설치된 디렉토리로 이동한다.
    [root@cozylinux scripts]# cd /usr/local/etc/raddb

  802.1x 관련 자료를 보면 알겠지만 Authentication Server(RADIUS)에 대해 Authenticator(AccessPoint)는
  하나의 클라이언트로서 동작하게 된다. 그래서 제일 먼저 할것은 이런 클라이언트들을 Authentication
  Server 에 알려주는것이다.
  이를 위해 clients.conf 을 열어 맨 아래에 다음의 예와 같이 추가한다.
  각각의 의미는 211.204.72.60 는 Authenticator 즉 AccessPoint 의 IP 주소를 의미하며 만약 등록할 AP 가
  여러개라면 아래와 같은 블럭을 여러개 등록하면 된다. 물론 각각의 AP 들의 IP 들을 등록할 수도 있지만
  subnet mask 를 이용하여 등록하는 방법도 있다. 이것은 clients.conf 파일 안에 예제가 있다.
  secret 은 Authentication Server 와 Authenticator 가 인증과정 에서 사용할 공유키(shared secret key)로
  이것을 이용하여 인증 메시지들이 보호된다.
  shortname 은 단지 주석과 같은 설명문으로 주로 해당 AP 의 SSID 를 등록해 주는게 좋다.
    client 211.204.72.60 {
        secret          = cozykyd_ssap
        shortname       = ssap
    }

  다음은 인증해줄 사용자(Supplicant)들을 등록하는 과정이다.
  같은 디렉토리에 users 파일이 그것이다. 이 파일에는 인증과정을 거쳐 Authenticator(AccessPoint) 를
  사용할 수 있는 사용자(Supplicant) 를 등록하면 되는데 이때 사용자 아이디는 Supplicant 인증서를
  만들때 입력한 commonName 이다.
  이전에 본인의 경우는 "youngdae" 로 입력했으므로 아래 예처럼 등록해준다
    #
    # This is an entry for a user with a space in their name.
    # Note the double quotes surrounding the name.
    #
    #"John Doe"     Auth-Type := Local, User-Password == "hello"
    #               Reply-Message = "Hello, %u"
    youngdae  User-Password == "cozypass"

  User-Password == "cozypass" 부분은 PEAP 인증을 할때만 사용되는 비밀번호 입력 란이다.
  즉 EAP-TLS 의 경우는 commonName 에 적은 Supplicant 의 인증서를 이용하여 인증하는 것이므로 비밀번호가
  필요없지만 PEAP 는 Supplicant 를 인증할때 위 문장의 아이디와 비밀번호를 이용하여 인증한다.

  같은 디렉토리에 radiusd.conf 파일을 열어 아래 항목들을 추가하거나 수정해준다
  아래의 환경설정 파일을 보면서 알겠지만 Radius 에는 다양한 인증 알고리즘과 방식을 지원한다.
  여기서 사용할려고 하는 EAP-TLS, PEAP 만 있는것이 아니라 EAP-MD5(CHAP), EAP-TTLS, LEAP 인증 알고리즘
  뿐만 아니라 Supplicant 정보를 주는 방법도 여기서처럼 users 파일을 통하기도 하고 Unix 의 passwd 파일
  을 사용하여 인증하기도 하고 심지어 LDAP 이나 DB 를 통하여 인증하는 방법도 제공한다.

    eap {
      default_eap_type = tls
      timer_expire     = 60
      ignore_unknown_eap_types = no
      cisco_accounting_username_bug = no

      tls {
        private_key_password = whatever
        private_key_file = ${raddbdir}/certs/cert-srv.pem
        certificate_file = ${raddbdir}/certs/cert-srv.pem
        CA_file = ${raddbdir}/certs/root.pem
        dh_file = ${raddbdir}/certs/dh
        random_file = ${raddbdir}/certs/random
        fragment_size = 1024
        include_length = yes
      }

      peap {
        default_eap_type = mschapv2
      }
    }

    authorize {
      preprocess
      chap
      eap
      suffix
      files
    }

    authenticate {
      unix
      eap
    }

  위에서 default_eap_type 을 "tls" 로 지정하여 EAP-TLS 를 기본 인증 방식으로 하겠다고 선언하였는데
  이곳에 "peap" 를 적어도 된다. 이것은 어디까지나 기본 EAP 인증 방식을 선언하는것으로 Supplicant 와
  Authentication Server 간에 인증 알고리즘을 협상하는 부분이 인증 과정의 프로토콜 안에 있고 이 협상
  과정에서 결정되는 알고리즘을 빨리 결정하기 위한 방법일 뿐이다.
  private_key_password 는 인증서 만들때 사용한 비밀번호인 challengePassword_default 값과 동일한 것이다
  그리고 ${raddbdir} 는 여기서는 /usr/local/etc/raddb 를 의미한다.

  보통 인증과정에서는 session key 라는 것을 사용하여 정적인 키를 사용함으로서 발생하는 공격을 막는다.
  부르트 포스 공격을 막을 수 있는 세션 키를 만들기 위한 두개의 파일을 만들어야 한다.
  certs 디렉토리로 이동한다. 이곳에는 이전에 생성한 9개의 인증서관련 파일들이 복사되어 있을것이다.
  이곳에 임의의 문자들이 들어간 두개의 파일 DH, Random 파일을 만든다.
  간단하게 만들기 위해서 두개의 파일 전부 현재 시간값을 아래처럼 하여 넣어준다.
    [root@cozylinux raddb]# cd certs
    [root@cozylinux certs]# date > dh
    [root@cozylinux certs]# date > random

  그 다음 RADIUS 서버를 실행시킬 스크립트를 만들어 본다.
  /usr/local/sbin 아래에 run-radius 라는 실행가능한 스크립트를 만든다.

    [root@cozylinux certs]# vi /usr/local/sbin/run-radius
    #!/bin/sh -x
    LD_LIBRARY_PATH=/usr/local/openssl/lib
    LD_PRELOAD=/usr/local/openssl/lib/libcrypto.so
    export LD_LIBRARY_PATH LD_PRELOAD
    /usr/local/sbin/radiusd $@

  이것은 radiusd 에 대한 wrapper 로 필요한 SSL라이브러리를 미리 로드하기 위해 이처럼 한것이다.
  스크립트 이므로 실행 권한을 아래처럼 준다.
    [root@cozylinux certs]# chmod 700 /usr/local/sbin/run-radius

  이제 RADIUS 를 실행하고 인증이 정상적으로 동작하는지 테스트 할 차례이다.
  RADIUS 를 아래처럼 인증 로깅(-A) 및 디버깅(-X) 모드로 실행한다. 출력되는 메시지를 보기 바란다.
    [root@cozylinux raddb]# /usr/local/sbin/run-radius -X -A
    ...
    ...
    Listening on authentication *:1812
    Listening on accounting *:1813
    Listening on proxy *:1814
    Ready to process requests.

  아직 Supplicant 를 위한 환경을 설정하지 못했으므로 지금은 localhost 가 Supplicant 가 되어 Unix 의
  passwd 파일에 있는 사용자로 인증해보자
  clients.conf 를 유심히 본 독자는 client 127.0.0.1 {...} 부분을 보았을 것이다. 이것을 이용하여 인증을
  시켜보면 아래와 같아. 먼저 /etc/passwd 파일에 없는 사용자(Supplicant)를 인증시켜보면
    [root@cozylinux raddb]# /usr/local/bin/radtest test test localhost 0 testing123
    Sending Access-Request of id 203 to 127.0.0.1:1812
            User-Name = "test"
            User-Password = "test"
            NAS-IP-Address = cozylinux.grid.or.kr
            NAS-Port = 0
    rad_recv: Access-Reject packet from host 127.0.0.1:1812, id=203, length=20
  역시 Access-Reject 당했다.

  이번에는 실제 본인의 Linux 에 있는 passwd 에 있는 계정을 이용해 인증해보면
    [root@cozylinux raddb]# /usr/local/bin/radtest honggildong test1234 localhost 0 testing123
    Sending Access-Request of id 198 to 127.0.0.1:1812
            User-Name = "honggildong"
            User-Password = "test1234"
            NAS-IP-Address = cozylinux.grid.or.kr
            NAS-Port = 0
    rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=198, length=20
  이번에는 정상적으로 Access-Accept 로 인증되었다.

7.AccessPoint 환경설정 - Authenticator
  AccessPoint 에 802.1x 관련 환경설정하는 부분이다. 만약 다른 제품의 AccessPoint 를 사용한다면 해당
  메뉴얼을 참고하고 여기서는 HostAP 2002-10-12 버전을 설치했으므로 별도로 설정할 파일은 없다
  (만약 최신의 HostAP v0.2.1 이상을 설치하였다면 hostapd.conf 파일을 수정해야 한다)

  호스트 장비에서 크로스 컴파일한 파일 hostapd 파일을 타겟 장비(AccessPoint)의 NFS 로 전달해줄
  디렉토리(타겟 장비의 NFS Root 디렉토리)의 sbin 에 복사해 준것을 기억할것이다.
  타겟 장비를 부팅 한 후 sbin 에 있는 hodstapd 를 아래 예처럼 실행한다.
    [root@cozyLDS sbin]$hostapd -x -o 211.204.72.60 -a 211.204.72.53 -S ssap -s cozykyd_ssap wlan0
    Using interface wlan0ap with hwaddr 00:30:0d:1a:fa:72 and ssid 'ssap'
    Flushing old station entries

  각각의 옵션 설명은
    -x 는 802.1x 인증,
    -o 211.204.72.60 는 Authenticator(AccessPoint) 의 IP
    -a 211.204.72.53 는 Authentication Server 의 IP
    -S ssap 는 AP 의 SSID
    -s cozykyd_ssap 는 Authentication Server 와 인증과정에서 사용할 공유키(shared secret key)
    wlan0 는 무선랜 인터페이스 이름이다.

8.Windows 2000/XP 환경설정 - Supplicant
  Windows 2000 의 경우 "802.1x for Windows 2000" patch 를 통하여 802.1x 프래임워크를 사용할 수 있는
  기본 환경을 이전에 만들었었다. Windows XP 의 경우는 이미 설치되어 있다.

  Supplicant 인증서를 PC 에 설치하는 이유는 이 인증서를 이용하여 Authentication Server 에 인증을 받아
  Authenticator(AccessPoint)에 접속하도록 하는것이다. 한가지 알아둘것은 EAP-TLS 의 경우는 Supplicant
  인증서를 통하여 인증을 받지만 PEAP 인 경우는 아이디와 비밀번호를 이용하여 인증을 받으므로 Supplicant
  인증서는 사용되지 않는다. PEAP 의 경우는 MD5(MSCHAPv2) 해쉬를 이용하여 인증을 받기 때문이다.

  가장 먼저 할것은 인증 서버에서 만든 Supplicant 인증서를 PC 로 다운받아 인증서를 설치해야 한다.
  그러기 위해서 root.der, cert-clt.p12 를 Supplicant 로 사용되는 일반 PC 에 다운받아 설치하면 된다.
  cert-clt.p12 은 파일명 그대로 client certificate 즉 Supplicant 인증서를 말한다. root.der 의 용도는
  root CA 인증서로 이 Supplicant 인증서를 signature 한 인증서이다.

  먼저 root CA 인증서인 root.der 을 설치한다.
  PC 로 다운받은 root.der 을 더블클릭한다. 그러면 인증서 정보가 첫 화면에 보이는데 여기서 "발급자"
  항목을 보면 이전에 root CA 인증서 만들때 사용한 commonName 이 보일것이다. 그 화면에서 "인증서 설치"
  버튼을 클릭한다. "인증서 저장소" 단계에서 "모든 인증서를 다음 저장소에 저장"을 선택하고 "찾아보기"
  버튼을 클릭하여 나타난 목록에서 "신뢰된 루트 인증 기관"을 선택하고 확인을 눌러 설치 작업을 마친다.

  이번에는 Supplicant 인증서인 cert-clt.p12 를 설치한다.
  마찬가지로 cert-clt.p12 을 더블클릭하여 암호 화면까지 이동한다. "암호" 항목에 인증서 만들떄 사용한
  challengePassword_default 값인 whatever 를 입력하고 다음으로 넘어간다. 이번에도 "인증서 저장소"
  화면이 나타나는데 이때는 "인증서 종류 기준으로 인증서 저장소를 자동으로 선택" 을 선택하여 완료한다.

9.통합 테스트 EPA-TLS
  Supplicant 인증서를 사용하여 AccessPoint 를 사용하는 테스트 환경을 만들어 본다.

  Authentication Server 인 RADIUS 를 실행한다.
    [root@cozylinux raddb]# /usr/local/sbin/run-radius -X -A

  Authenticator 인 AccessPoint 의 hostapd 를 실행한다.
    [root@cozyLDS sbin]$hostapd -x -o 211.204.72.60 -a 211.204.72.53 -S ssap -s cozykyd_ssap wlan0

  Supplicant 인 일반 PC 의 "네트워크 환경"의 등록 정보를 선택한 후 무선 랜에 해당하는 "로컬 영역 연결"을
  선택하여 등록 정보를 보면 "인증" 탭이 보일 것이고 그 안에 802.1x 관련 설정 항목들이 보일 것이다.
  "IEEE 802.1x를 사용하여 네트워크 액세스 제어" 를 선택한다.
  "EAP 종류" 로 "스마트카드 또는 기타 인증서" 를 선택한다. 이것은 EAP-TLS를 의미한다.
  "컴퓨터 정보가 있으면 컴퓨터로 인증"을 선택한다.
  그 다음 "속성" 버튼을 클릭하여 "스마트카드 또는 다른 인증서 속성" 화면으로 이동한다.
  "이 컴퓨터의 인증서 사용"을 선택하고 "간단한 인증서 선택 사용(권장)"을 선택한다.
  "서버 인증서 유호성 검사"을 선택한 후 "신뢰된 루트 인증 기관" 목록에서 root CA 인증서 만들때 사용한
  commonName 을 선택한다.

  이제 환경설정은 끝났으므로 실제 EAP-TLS 인증을 통한 AccessPoint 접속 여부를 테스트 한다.
  EAP-TLS 인증을 통한 테스트 결과 정상적으로 인증이 된다면 Authenticator 인 AccessPoint 의 hostapd 는
  아래와 같은 인증이 성공한 메시지를 화면에 출력한다.
    Station 00:e0:63:50:9a:9e authenticated (open system)
    Station 00:e0:63:50:9a:9e associated (aid 1)
    IEEE 802.1X: Start authentication for new station 00:e0:63:50:9a:9e
    IEEE 802.1X: Unauthorizing station 00:e0:63:50:9a:9e
    IEEE 802.1X: Authorizing station 00:e0:63:50:9a:9e

  그리고 Authentication Server 인 RADIUS 도 아래와 같은 Access-Request 메시지를 보여준다.
    rad_recv: Access-Request packet from host 211.204.72.60:1025, id=0, length=154
        User-Name = "youngdae"
        NAS-IP-Address = 211.204.72.60
        NAS-Port = 1
        Called-Station-Id = "00-30-0D-1A-FA-72:ssap"
        Calling-Station-Id = "00-E0-63-50-9A-9E"
        Framed-MTU = 2304
        NAS-Port-Type = Wireless-802.11
        Connect-Info = "CONNECT 11Mbps 802.11b"
        EAP-Message = 0x0202000d01796f756e67646165
        Message-Authenticator = 0x2e2637890114574f6decf999900d9b5a
    ...
    ...
    rlm_eap_tls: <<< TLS 1.0 Handshake [length 0086], ClientKeyExchange
      TLS_accept: SSLv3 read client key exchange A
    rlm_eap_tls: <<< TLS 1.0 Handshake [length 0086], CertificateVerify
      TLS_accept: SSLv3 read certificate verify A
    rlm_eap_tls: <<< TLS 1.0 ChangeCipherSpec [length 0001]
    rlm_eap_tls: <<< TLS 1.0 Handshake [length 0010], Finished
      TLS_accept: SSLv3 read finished A
    rlm_eap_tls: >>> TLS 1.0 ChangeCipherSpec [length 0001]
      TLS_accept: SSLv3 write change cipher spec A
    rlm_eap_tls: >>> TLS 1.0 Handshake [length 0010], Finished
      TLS_accept: SSLv3 write finished A
      TLS_accept: SSLv3 flush data
      (other): SSL negotiation finished successfully
    SSL Connection Established
    ....
    ....
    Sending Access-Accept of id 5 to 211.204.72.60:1026
        MS-MPPE-Recv-Key = 0x4929fe53257ac2151c87cac8dc38bf0b5bebbc6271e22a8dc2090f7ad775259c
        MS-MPPE-Send-Key = 0x518cd21f38c1e470a8614aa624d514fd49162e5d9da767231ffbe7e2448c6a92
        EAP-Message = 0x03060004
        Message-Authenticator = 0x00000000000000000000000000000000
        User-Name = "youngdae"

10.통합 테스트 PEAP
  아이디와 비밀번호를 이용하여 AccessPoint 를 사용하는 테스트 환경을 만들어 본다.

  Authentication Server 인 RADIUS 를 실행한다.
    [root@cozylinux raddb]# /usr/local/sbin/run-radius -X -A

  Authenticator 인 AccessPoint 의 hostapd 를 실행한다.
    [root@cozyLDS sbin]$hostapd -x -o 211.204.72.60 -a 211.204.72.53 -S ssap -s cozykyd_ssap wlan0

  Supplicant 인 일반 PC 의 "네트워크 환경"의 등록 정보를 선택한 후 무선 랜에 해당하는 "로컬 영역 연결"을
  선택하여 등록 정보를 보면 "인증" 탭이 보일 것이고 그 안에 802.1x 관련 설정 항목들이 보일 것이다.
  "IEEE 802.1x를 사용하여 네트워크 액세스 제어" 를 선택한다.
  "EAP 종류" 로 "보호된 EAP (PEAP)" 를 선택한다. 이것은 PEAP를 의미한다.
  "컴퓨터 정보가 있으면 컴퓨터로 인증"을 선택한다.
  그 다음 "속성" 버튼을 클릭하여 "보호된 EAP 속성" 화면으로 이동한다.
  "서버 인증서 유호성 검사"을 선택한 후 "신뢰된 루트 인증 기관" 목록에서 root CA 인증서 만들때 사용한
  commonName 을 선택한다.
  "인증 방법 선택" 은 "보안된 암호 (EAP-MSCHAP v2)"를 선택하고 바로 옆의 "구성" 버튼을 클릭하여 나타난
  화면에서 "자동으로 Windows 로그온 이름 및 암호(도메인이 있으면 도메인도 사용)"은 선택을 해제한다.

  이제 환경설정은 끝났으므로 실제 MD5(MSCHAPv2)인증을 통한 AccessPoint 접속 여부를 테스트 한다.
  PEAP 인증을 통한 테스트 결과 freeRADIUS 환경 파일중 users 파일에 등록한 아이디와 비밀번호로
  "사용자 이름"과 "암호"를 입력하고 정상적으로 인증이 된다면 Authenticator 인 AccessPoint 의 hostapd 는
  아래와 같은 메시지를 화면에 출력한다.
    Station 00:e0:63:50:9a:9e authenticated (open system)
    Station 00:e0:63:50:9a:9e associated (aid 1)
    IEEE 802.1X: Start authentication for new station 00:e0:63:50:9a:9e
    IEEE 802.1X: Unauthorizing station 00:e0:63:50:9a:9e
    EAP Identifier of the Response-Identity from 00:e0:63:50:9a:9e does not match (was 1, expected 2)
    EAP Identifier of the Response-Identity from 00:e0:63:50:9a:9e does not match (was 1, expected 2)
    IEEE 802.1X: Authorizing station 00:e0:63:50:9a:9e

  그리고 Authentication Server 인 RADIUS 도 아래와 같은 Access-Request 메시지를 보여준다.
    rad_recv: Access-Request packet from host 211.204.72.60:1030, id=7, length=188
        User-Name = "youngdae"
        NAS-IP-Address = 211.204.72.60
        NAS-Port = 1
        Called-Station-Id = "00-30-0D-1A-FA-72:ssap"
        Calling-Station-Id = "00-E0-63-50-9A-9E"
        Framed-MTU = 2304
        NAS-Port-Type = Wireless-802.11
        Connect-Info = "CONNECT 11Mbps 802.11b"
        EAP-Message = 0x0209001d19001703010012b922110d106dead559c232a997f421baddb6
        State = 0x398048c0eee8260705486fa942d6a792
        Message-Authenticator = 0x1633ebee04daa5bd6bce3ec9ee364739
    ...
    ...
    modcall: group authenticate returns ok for request 7
      PEAP: Got tunneled reply RADIUS code 2
            EAP-Message = 0x03090004
            Message-Authenticator = 0x00000000000000000000000000000000
            User-Name = "youngdae"
      PEAP: Processing from tunneled session code 0x81877a0 2
            EAP-Message = 0x03090004
            Message-Authenticator = 0x00000000000000000000000000000000
            User-Name = "youngdae"
      PEAP: Tunneled authentication was successful.
      rlm_eap_peap: SUCCESS
    ....
    ....
    Sending Access-Accept of id 8 to 211.204.72.60:1030
        MS-MPPE-Recv-Key = 0x48a148c708b87dcecdac16521edd01e3fec235822fe9ce5bb228a8a34a896dd6
        MS-MPPE-Send-Key = 0xba52fa4eadcbcdc98ca0ab4d1801c512726660a2aad41e832b5c551f0757fe40
        EAP-Message = 0x030a0004
        Message-Authenticator = 0x00000000000000000000000000000000
        User-Name = "youngdae"






  [임베디드] [강좌] 유무선 공유기 제작: 802.1x, RADIUS 설치 [4]  김영대 2004/06/16 16528 2081
3   [임베디드] [강좌] 유무선 공유기 제작: NAT, firewall, DHCP 설치 [3]  김영대 2004/06/16 11583 2807
2   [임베디드] [강좌] 유무선 공유기 제작: PCMCIA, HostAP, Bridge 설치 [2]  김영대 2004/06/16 14909 1774
1   [임베디드] [강좌] 유무선 공유기 제작: 제작 환경 [1]  김영대 2004/06/16 11162 1513

1
 

Copyright 1999-2017 Zeroboard / skin by zero