2016년 12월 7일 수요일

windows 2008 r2 TLS v1.2 활성화

WWDC 2016에서 앞으로 앱 -> 서버 접속이 필요한 경우 서버는 TLS v1.2 를 지원해야 한다는 발표가 있었다.

적용 시기는 2017년 1월 1일부터라고 들었던 것 같은데.....

몇 일전부터 안되는 듯 하다.

참고 :
http://nopdin.tistory.com/1818
https://forums.developer.apple.com/message/156662#156662

그래서 서버(windows 2008 r2)에 TLS 1.2 를 활성화 해야한다.

windows 2008 r2 서버의 TLS 1.2 활성화 방법은 아래를 참고하여 진행하였다.
참고 :
http://www.sysnet.pe.kr/2/0/1834
https://community.spiceworks.com/topic/589388-enable-tls-1-2-and-tls-1-1-on-a-2008-server

registry 수정
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"Enabled"=dword:00000001
"DisabledByDefault"=dword:00000000

그런데 위 레지스트리 추가 후 서버를 재시작하였으나, TLS 1.2 적용이 되지 않았다.

TLS 적용 확인 여부는 아래 사이트에서 확인할 수 있다.

https://www.ssllabs.com/ssltest/index.html

쨌든.... 레지스트리 수동 추가로 진행한 방법이 적용되지 않아서 자동으로 protocol 관련 레지스트리를 추가해주는 IIS Crypto 2.0 을 사용하여 TLS 1.2 를 적용하였다.

다운로드는 아래 사이트

https://www.nartac.com/Products/IISCrypto

사용법은 서버에 적용할 protocol 등을 선택 후 apply 로 끝난다.


이후 서버를 재 시작하여 적용 여부를 위 사이트에서 확인 및 앱에서 서버 접속을 확인하니 잘되었다.

2016년 11월 24일 목요일

php 로 Active Directory 의 lastLogon 구하기

php로 Active Directory 인증/조회/수정을 할 수 있도록  adLDAP class 를 사용하고 있다.



lastLogon 특성을 매 분마다 수집하여 사용하고자 한다.

그런데 문제는 AD 서버가 2대인데 사용자 인증에 사용된 서버에서만 lastLogon 특성 값이 업데이트가 된다.

그래서 양쪽 서버에서 조회한 값을 비교해서 합쳐주도록 했다.
$options1 = array("domain_controllers" => array("ad1st"));
$options2 = array("domain_controllers" => array("ad2nd"));

$adldap1 = new adLDAP($options1);
$adldap2 = new adLDAP($options2);

$users = $adldap1->user()->all(true,"*", true);
$lastLogons = array();
foreach($users as $id => $name ) {
    $info1 = $adldap1->user()->infoCollection($id, array("*"));
    $mktime1 = round(convertWindowsTimestamp($info1->lastLogon));

    $info2 = $adldap2->user()->infoCollection($id, array("*"));
    $mktime2 = round(convertWindowsTimestamp($info2->lastLogon));

    if( $mktime1 >  $mktime2 ) {
        $mktime = $mktime1;
        $auth = "ad1st";
    } else if( $mktime1 < $mktime2 ) {
        $mktime = $mktime2;
        $auth = "ad2nd";
    } else {
        $mktime = $mktime1;
        $auth = "ad1st";
    }

    $lastLogon = date("YmdHis", $mktime);
    $lastLogons["$id"] = array("auth" => $auth, "lastlogon" => $lastLogon);
}

전체 사용자 정보를 담은 인스턴스를 생성 후 각 사용자 마다 lastLogon 정보를 찾아서 비교 후에 다시 배열로 저장했다.

그런데 lastLogon 의 값은 linux 의 mktime() 값과 다르기에 convertWindowsTimestamp()를 사용하였다.

function convertWindowsTimestamp($wintime) {
   return $wintime / 10000000 - 11644473600;
}