세이박스

[PHP] 보안서버(ssl)에서 메일 발송 하기

웹프로그램
보안 서버로 ssl 적용 후 부터 php 메일 발송시 발송이 안되기 시작하였다.

원인을 확인 해보니 보안 smtp 로 발송해야 한다는 사실을 알게 되었다.

그래서, 이래저래 알아보니 메일 서버가 별도로 있는경우 보안 릴레이 방식으로 발송을 하면 된다는것을 알게되어 적용 하였다.

먼저, 메일서버의 릴레이 발송할 개정이 하나 있어야 한다.

다음 함수에 메일서버 ip 및 릴레이 개정 정보를 입력하시면 됩니다.

function sendmail($name, $from, $to, $subject, $body, $html, $charset ) {
 $smtp_server   = "아이피"; //stmp ip를 입력
 $smtp_user = "아이디"; //smtp id 입력
 $smtp_passwd = "비밀번호"; //smtp 비밀번호 입력

 if(!$smtp_sock = fsockopen("$smtp_server", 25)) {
  return false;
 }
 fputs($smtp_sock, "AUTH LOGIN\n");
 fputs($smtp_sock, base64_encode($smtp_user)."\n");
 fputs($smtp_sock, base64_encode($smtp_passwd)."\n");
 fputs($smtp_sock, "HELO $smtp_server\n");
 fputs($smtp_sock, "VRFY $stmp_user\n");
 fputs($smtp_sock, "MAIL FROM:$from\n");
 fputs($smtp_sock, "RCPT TO:$to\n");
 fputs($smtp_sock, "DATA\n");
 fputs($smtp_sock, "From: $name<$from>\n");
 fputs($smtp_sock, "X-Mailer: miplus\n");  
 if($html) fputs($smtp_sock, "Content-Type: text/html;");
 else fputs($smtp_sock, "Content-Type: text/plain;");  
 fputs($smtp_sock, "charset=$charser\n");
 fputs($smtp_sock, "MIME-Version: 1.0\n");
 fputs($smtp_sock, "Subject: $subject\n");
 fputs($smtp_sock, "To: $to\n");
 fputs($smtp_sock, "$body");
 fputs($smtp_sock, "\n.\nQUIT\n");
 fclose($smtp_sock);
 return true;
}

$text = "<html><body>test</body></html>"; //html 방식으로 발송 가능
$subject = "메일제목";
$from = "
custom@test.co.kr"; //발송자 이메일 주소
$from_name = "이름"; //발송자 이름
$to =
member@test.co.kr" //수신자 이메일 주소
$html = 1; //HTML 테그 1:사용, 0:사용안함
$charset = "UTF-8"; //언어 EUC-KR, UTF-8

if(sendmail($from_name,$from,$to,$subject,$text,$html,$charset)) {
   echo "발송완료";
} else {
   echo "발송실패";
}

빨간색으로 표시한 부분만 설정에 맞게 고쳐서 이용하시면 됩니다.

이 웹사이트의 보안 인증서에 문제가 있습니다. 해결방법

컴활용
사용자 삽입 이미지

네이버 로그인 중 위 이미지와 같은 오류가 발생했다면 네이버 문제 보다는 자신의 컴퓨터 시간의 문제로 보시면 됩니다.
우측 하단 시간을 더블 클릭하셔서 현재 시간으로 맞혀 보세요!

왜 이런 증상이 나냐구요! 보안 인증서란 네이버라는 사이트에 대해 보안을 인증해주는 기관이 있는데 보통 1년 또는 2년 정도의 인증기간을 주며 해당 서버에 접속시 사용자의 아이디, 비번등 개인 정보를 네이버 서버로 보낼때 암호화 해서 보냅니다. 그런데 네이버 인증서기간이 2008년 10월 30일이 종료 인데 사용자 컴이 2009년 10월 30일로 되어 있다던가 그런경우 인증서 기간이 지난것으로 판단해서 오류 발생하는 겁니다.

하지만, 간혹 어떤 사이트에서는 정말 인증서 기간이 지났는데도 관리자가 연장하지 않아서 위와 같은 문제가 발생 하는 경우도 간혹 있습니다.

아니면 2007년 하반기 개인정보보호진흥원에서 개인정보 보호를 위해 하루 1만명 이상방문자 사이트 등에 대해 의무적으로 보안 적용을 하도록 지시하여 수많은 사이트들이 보안 적용을 하고 있는것으로 알고 있습니다. 따라서, 기술적인 문제로 제대로 적용 안된 이유 일수도 있습니다.
그런경우엔 해당 사이트에 문의를 하셔야 합니다. ^^;

IIS 6.0 CSR 생성(Microsoft Internet Information Server 6.0)

서버,보안
※ 주의 하실 점
정보를 입력하는 과정에서 쉼표(,)는 절대로 사용하지 마시기 바랍니다.
일반적으로 CSR을 생성하는 과정에서 쉼표는 데이터 입력을 중지한다는 의미를 갖고있기 때문에 함부로 입력하면 잘못된 CSR이 생성될 수 있습니다.
관리자(Administrator)로 로그온 되었는지 확인해주시기 바랍니다.
모든 정보는 반드시 영문으로 입력하셔야 합니다. 다른 언어가 들어갈 경우 인증서가 발급 되지 않습니다.

CSR 생성
  1. 시작버튼 > 모든 프로그램 > 관리도구 > "인터넷 정보 서비스(IIS) 관리"를 선택합니다.

  2. 인증서를 사용할 사이트를 선택한 후 마우스 오른쪽 버튼을 클릭해서 "속성"을 봅니다.

  3. "디렉터리 보안" 탭을 선택합니다.

  4. "보안 통신"에서 "서버 인증서" 버튼을 클릭하면 웹서버인증 마법사 화면이 나타납니다.

  5. 다음 > "새 인증서를 만듭니다"를 선택합니다.

  6. "요청을 지금 준비하지만 나중에 보냅니다"를 선택합니다.

  7. 인증서를 구분할 수 있도록 이름을 적당히 지어 줍니다.
    (여기는 한글로 적어도 상관 없습니다) 키의 비트길이를 반드시 1024비트로 선택합니다. 체크박스는 체크하지 말고 비워둡니다.

  8. 다음 단계로 가서 CSR 생성에 필요한 정보를 입력합니다.
    <모든 정보는 반드시 영문으로 입력하셔야 합니다.>
    <입력예>
    조직 (O,영문회사명) : Dotname Korea
    조직 구성 단위 (U,부서명) : Digital Certificate Team
    일반이름 (C,인증 받을 도메인 주소) : secure.anycert.com
    국가/지역 (C,국가코드) : KR
    시/도 (S) : Seoul
    구/군 (L) : Songpa
    <주의사항>
    ① 조직명(O,영문회사명)에는 < > ~ ! @ # $ % ^ * / \ ( ) ? 등의 특수 문자를 넣을 수 없습니다.
    사업자 등록증에 기재된 회사명과 일치하는 영문회사명을 넣어 주시기 바랍니다. (예: 사업자 등록증에 '닷네임 코리아'이면 dotname korea 으로 넣어주셔야 합니다. dotname만 넣으시면 않됩니다.)
    또한, 인증서를 설치할 사이트명(C,인증 받을 도메인 주소)에 해당하는 도메인의 등록정보를 반드시 참조하셔서 해당 등록정보에 기재된 회사명을 참고 하실 수 있겠습니다.
    영문회사명은 소유하고 계신 도메인이 com/net/org인 경우에는 Network Solutions에서, kr인 경우에는 KRNIC에서 확인할 수 있습니다.
    영문회사명에 쉼표(,)가 들어간 경우에는 쉼표만 빼고 입력해주시면 됩니다.(예: Devpia Co., Ltd. -> Devpia Co. Ltd.)
    ② 조직 구성 단위(U,부서명)는 적당히 입력해주셔도 됩니다.
    ③ 일반이름(C,인증 받을 도메인 주소)에는 IP 주소, 포트번호, 경로명, http:// 등을 포함할 수 없습니다.
  9. 파일을 저장할 경로를 지정해줍니다. 예를 들어 C:\anycert.txt 로 경로를 지정해주면 C:드라이브 밑에 anycert.txt라는 이름으로 파일이 생성됩니다.
    -----BEGIN NEW CERTIFICATE REQUEST-----
    MIISDOIUlkmlsRRlkSllskjauASKJlalOSISLKjwBgN
    VBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZS
    BUb3duMRQwEgYDVQQKEwtPcHBvcnR1bml0aTEYMBYGA
    1UECxMPT25saW5lIFNlcnZpY2VzMRowGAYDVQQDExF3
    d3cuZm9yd2FyZC5jby56YTBaMA0GCSqGSIb3DQEBAQU
    AAAklmLKSuljSOIjsfBWu5WLHD/G4BJ+PobiC9d7S6p
    DvAjuyC+dPAnL0d91tXdm2j190D1kgDoSp5ZyGSgwJh
    2V7diuuPlHDAgEDoAAwDQYJKoZIhvcNAQEEBQADQQBf
    8LSLKknlsklSSLlworrr334ZmXD1AvUjuDPCWzFupRe
    iq7UR8Z0wiJUUsllkfq/IuuIlz6oCq6htdH7/tvKhh
    -----END NEW CERTIFICATE REQUEST-----
  10. 이 CSR 파일을 E-mail로 첨부하여 발송합니다.
 출처 : http://www.anycert.co.kr/support/4_1ssl_install_csr12_5.html

MS iis 6.0 ssl 설치하기

서버,보안

  IIS 6.0(Microsoft Internet Information Server 6.0) 신규

고객님께서는 이전에 CSR 생성 과정을 진행해 주셨습니다.
그래서 IIS 인터넷 정보 서비스(IIS) 관리에서 "새 인증서를 만듭니다"를 통해서 서버 암호화 키(개인키)를 생성하였고, 생성된 암호화 키(개인키)를 토대로 CSR(Certificate Signing Request)을 저희 애니서트로 보내 주셨습니다.
그리고 애니서트에서는 서버 암호화 키(개인키)와 키쌍(key pair)을 이루는 고객님의 정식 웹서버인증서를 발급하게 됩니다.
이제 고객님의 IIS 6.0 서버인증서 관리자에서 서버 암호화 키(개인키)와 정식 웹서버 인증서를 조합하는("보류 중인 요청을 처리한 다음 인증서를 설치한다") 작업을 하시면, IIS 6.0 서버에 SSL 설치는 마치게 됩니다.


※ IIS 6.0 웹서버의 인증서 설치 순서

1. 발급된 인증서 확인
2. 웹서버로 발급된 인증서 올리기
3. IIS 6.0 웹서버에 인증서 설치하기
4. IIS 6.0 웹서버에 인증서 설치 확인하기
5. IIS 6.0 웹서버 SSL 포트 설정하기
6. 루트 & 체인 인증서 설치하기
7. 키쌍(key pair, 인증서 및 개인키) 백업 하기
8. SSL 구동 확인


1. 발급된 인증서 확인

먼저 발급된 웹서버 인증서를 확인합니다. 웹서버 인증서는 인증받을 도메인이름으로 발급됩니다.

웹서버인증서 : [인증받은 도메인 이름으로 된].cer
루트인증서 : Wildcard_Root.cer
체인인증서 : Wildcard_Chain.cer

위의 발급된 인증서는 애니서트에서 고객님께 전자 메일로 발급해 드립니다.
그러므로 전자 메일에 발급된 인증서 항목을 알려드리며, 발급된 인증서는 첨부파일로 첨부되어있습니다.

윈도우 PC에서 발급 받으신 웹서버 인증서([인증받은 도메인 이름으로 된].cer파일)를 열어서(double click) 내용을 확인합니다.(메모장이나 울트라 에디터에서 열지 않습니다.)
웹서버 인증서를 열게 되면 다음과 같은 내용을 확인하실 수 있습니다.

[인증서 보기 - 일반]

웹서버 인증서 정보의 [일반] 탭 부분에서 인증서 정보에서 "정보가 부족하므로 이 인증서를 확인할 수 없습니다." 메시지를 확인 할 수 있습니다.
현재 발급된 인증서는 함께 드린 루트&체인 인증서가 설치되지 않아서 경고 메시지가 나오는 것이므로 위와 같은 메시지가 나오는 것이 맞습니다. 가이드 순서대로 설치를 진행하시고 나면 정상적인 메시지를 확인하실 수 있습니다.
그리고 발급 대상에서 고객님이 인증받을 도메인 주소로 신청하신 도메인 주소가 맞는지 확인합니다.

다음으로는 [자세히] 탭 부분에서

[인증서 보기 - 자세히]

발급한 웹서버 인증서의 유효기간을 확인합니다. (유효 기간(시작)과 유효 기간(끝) 정보를 확인합니다.)
그리고 공개 키 부분에서 RSA (1024 Bits) 를 확인합니다. 애니서트에서 발행되는 인증서는 1024 Bits 키를 권고합니다. 꼭 확인해 주시기 바랍니다.

2. 웹서버로 발급된 인증서 올리기

발급받으신 인증서를 IIS 웹서버에 복사합니다.(보통 Ftp 로 웹서버로 올려 주시면 됩니다.)

3. IIS 6.0 웹서버에 인증서 설치하기

IIS 서버에서는 인증서 관리를 인터넷 정보 서비스(IIS) 관리에서 관리하게 됩니다.
기존에 CSR 생성 과정으로 생성된 서버 암호화 키(개인키)에 정식 웹서버 인증서를 조합하는("보류 중인 요청을 처리한 다음 인증서를 설치한다") 작업을 진행합니다.
다음의 순서를 밟아 주시기 바랍니다.

① 인터넷 정보 서비스(IIS) 관리 열기

[시작] -> [모든 프로그램] -> [관리도구] -> [인터넷 정보 서비스(IIS) 관리]를 선택합니다.



② 인증서 설치할 웹사이트 속성 열기

[인증서를 설치할 웹사이트] 에서 [속성]을 엽니다.
( 여러 개의 웹사이트가 있을 경우에는 반드시 인증서 설치할 웹사이트에서 생성되어야 하므로 유의 바랍니다. )


③ 인증서 설치할 웹사이트 등록정보에서 [디렉터리 보안] 열기

인증서를 설치할 웹사이트의 [등록정보]에서 [디렉터리 보안] 을 선택합니다.


④ 디렉터리 보안에서 [서버 인증서] 열기

[디렉터리 보안]에서 [서버 인증서] 버튼을 선택합니다.


⑤ 웹서버 인증서 마법사 시작

웹서버 인증서 마법사를 시작하게 됩니다. [다음]을 선택합니다.


⑥ 보류중인 인증서 요청 선택(웹서버 인증서 설치 과정 선택)

IIS 인증서 마법사에서 [보류중인 요청을 처리한 다음 인증서를 설치합니다]를 선택합니다.
(IIS 웹서버에서 CSR 생성한 인증서 요청에 대한 웹서버 인증서 설치(보류중인 인증서 요청을 처리)를 선택합니다.)


⑦ 보류중인 요청 처리(웹서버 인증서 설치)

다음으로, [보류중인 요청을 처리할 정식 웹서버 인증서] 찾아서 불러들입니다.
(IIS 웹서버에서 CSR 생성한 인증서 요청에 대한 웹서버 인증서 설치(보류중인 인증서 요청을 처리)합니다.)


⑧ 보류중인 요청 처리 결과(웹서버 인증서 설치 확인)

응답 파일에서 인증서를 설치합니다.
설치하시고자 하시는 인증서의 정보를 확인하시고, 특히 만료일을 확인해 주시기 바랍니다.


다음으로, 웹서버 인증서 마법사를 완료합니다.


4. IIS 6.0 웹서버에 인증서 설치 확인하기

보류중인 요청 처리(웹서버 인증서 설치)한 후에는
다음과 같이 IIS 관리자 [디렉토리 보안] 탭의 [보안 통신] 항목에서
[서버 인증서]과 함께 [편집], [인증서 보기] 항목이 활성화 됩니다.

IIS 서버에 설치된 인증서를 확인합니다.
다음의 순서를 밟아 주시기 바랍니다.

[인터넷 정보 서비스(IIS) 관리] 에서 [디렉토리 보안]의 [보안 통신] 부분에서 [인증서 보기]를 선택합니다.




다음과 같이 웹사이트에 설치된 인증서 정보를 확인해야 합니다.
[발급 대상]에서 [인증받은 도메인 주소]를 확인해 주시고, 설치된 인증서의 유효기간 확인해 주십니다.
마지막으로 제일 중요한 부분인 [사용자가 이 인증서와 일치하는 개인 키를 갖고 있습니다.] 항목을 확인해 주셔야 합니다.
[사용자가 이 인증서와 일치하는 개인 키를 갖고 있습니다.] 항목이 확인 되지 않는다면, 웹서버에 설치된 인증서는 서버키(암호키)와 웹서버인증서(공개키) 간의 조합된 RSA - SSL 암호화 통신이 되지 않습니다.



5. IIS 6.0 웹서버 SSL 포트 설정하기


[인터넷 정보 서비스(IIS) 관리] 에서 [웹사이트] 항목의 SSL 포트 가 활성화 된 것을 보실 수 있습니다.
SSL 포트는 https 통신에서 서비스 되는 포트를 설정해 주므로, SSL 기본 포트로 443 포트(http 기본 포트는 80 포트이듯이)를 설정해 줍니다.


6. 루트 & 체인 인증서 설치하기

본 인증서는 루트&체인 인증서를 별도로 설치해 주셔야 합니다.
다음 순서대로 루트인증서와 체인인증서를 각각 설치해 주시기 바랍니다.
두 인증서의 설치방법은 동일합니다.

① MMC 콘솔 창 열기

[시작] -> [실행]을 선택합니다.



[실행] 창에서 mmc을 입력하고 실행합니다.


기본 mmc 콘솔 창 보실 수 있습니다.

기본 mmc 콘솔 창에서 [콘솔] -> [스냅인 추가/제거]를 선택합니다.



[스냅인 추가/제거] 창에서 [추가]를 선택합니다.








② 인증서 가져오기

신뢰된 루트 인증 기관에서 [모든 작업] -> [가져오기]를 선택합니다.













 

7. 키쌍(key pair, 인증서 및 개인키) 백업 하기

혹시라도 모를 재해를 대비해서 시스템에 설치된 키쌍(key pair, 인증서 및 개인키)을 백업합니다.
(시스템에 설치된 암호화 키(개인키)와 웹서버인증서(공개키)는 MMC 콘솔으로 관리됩니다.)
<인증서는 개인키와 함께 꼭 백업을 해두셔야 하며, 백업을 하지 않아 발생하는 문제에 대해서는 재발급 비용이 추가될 수 있습니다.>

① 로컬컴퓨터에 설치된 키쌍(key pair, 인증서 및 개인키) 백업

IIS 서버에서는 CSR 생성할 때에 시스템에 암호화 키(개인키)를 생성합니다.
IIS 서버는 웹서버인증서(공개키)가 설치되면서 이미 생성된 암호화 키(개인키)와 웹서버인증서(공개키)를 하나의 키쌍(key pair, 인증서 및 개인키)으로 조합됩니다.
그래서 다음과정으로 키쌍(key pair, 인증서 및 개인키)을 백업받습니다.

[인증서(로컬 컴퓨터)]에서 [개인] -> [인증서] 항목에 3. IIS 6.0 웹서버에 인증서 설치하기에서 생성한 키쌍(key pair, 인증서 및 개인키-인증받은 도메인 이름으로 표시됩니다)을 볼 수 있습니다.
키쌍(key pair, 인증서 및 개인키)을 선택하고, 마우스 오른쪽 버튼으로 빠른 메뉴를 엽니다.
빠른 메뉴에서 [모든 작업] -> [내보내기]를 선택합니다.


그러면 [인증서 내보내기 마법사] 창이 나타나며, 키쌍(key pair, 인증서 및 개인키)을 내보내는 백업 작업을 합니다.


키쌍(key pair, 인증서 및 개인키) 백업 옵션 [예, 개인키를 내보냅니다.]를 선택합니다.


파일 내보내기 형식으로 [개인 정보 교환-PKCS #12(.PFX)]를 선택합니다.


암호화 키(개인키)의 암호를 설정합니다.
(암호화 키(개인키)의 암호는 반드시 기억하고 있어야 합니다. 암호화 키(개인키)의 암호를 분실하게 되면 백업하신 키쌍(key pair, 인증서 및 개인키)을 사용할 수 없게 됩니다.)


내보낼 키쌍(key pair, 인증서 및 개인키)의 파일이름을 입력합니다.


키쌍(key pair, 인증서 및 개인키) 내보내기를 완료합니다.


키쌍(key pair, 인증서 및 개인키) 내보내기를 결과를 확인합니다.

내보낼 키쌍(key pair, 인증서 및 개인키)의 파일이 생성되었습니다. 보안된 PC의 저장장치 등 안전한 곳에 보관합니다.

② MMC 인증서 스냅인을 저장합니다.

IIS 서버에 설치되는 인증서는 MMC 인증서 스냅인을 통해 관리되므로, 인증서 스냅인을 저장해 놓습니다.
(스냅인 저장으로 인증서가 백업되지는 않습니다. MMC에서 인증서 스냅인(snap-in) 추가된 사항만 저장되는 것입니다.)

mmc 콘솔 주메뉴에서 [다른 이름으로 저장]을 선택합니다.


적당한 경로와 적당한 이름으로 저장해 놓습니다.


mmc 인증서 스냅인을 저장 완료되었습니다. 나중에 인증서를 관리할 때에 저장된 mmc 인증서 스냅인을 불러서 사용할 수 있습니다.

 

8. SSL 구동 확인

① 443 포트(HTTPS 통신) 네트웍 활성 확인
C:\>%windir%\system32\netstat -an

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
  TCP    0.0.0.0:443            0.0.0.0:0              LISTENING
... ...
C:\> 

② 방화벽과 L4 Switch 장비 설정 확인
고객님의 웹서버와 연계되어 설정된 방화벽 장비와 L4 Switch 장비의 설정을 80 포트 설정된 것 같이 443 포트에도 설정되어야 합니다.

③ HTTPS 보안 통신으로 페이지를 확인
웹 브라우져를 통해서 https://[인증받은 도메인]/[테스트페이지].html 페이지를 확인해 봅니다.


[보안정보 확인창]

접속시에 위와 같은 보안정보 확인 창을 보실 수도 있으나, 이것은 전체 페이지를 암호화 처리했을 경우에 몇몇 이미지나 object 태그의 codebase 부분에 절대경로가 설정된 경우에 보안 정보를 나타내는 정보 창이므로, [아니오]를 선택합니다.

그러면, 웹 브라우져 하단 상태표시줄에 HTTPS 암호화 상태를 나타내는 노란 자물쇠를 확인해 보실 수 있습니다.

[SSL 128 bit 확인]


노란 자물쇠에 마우스 포인터를 가르키고 잠시 기다리면 128 bit 암호화 처리 상태를 확인해 보실 수 있습니다.
그리고 노란 자물쇠를 double click 하면, 서버에 설치된 인증서를 확인해 보실 수 있습니다.


[인증서 보기 - 일반]


인증서 용도가 [● 원격 컴퓨터의 신분을 확인합니다.] 라는 웹서버 인증서로 설정된 것을 확인할 수 있습니다.
다음으로 인증서 자세히 보기 부분에서 설치된 웹서버 인증서의 유효기간을 확인합니다. (유효 기간(시작)과 유효 기간(끝) 정보를 확인합니다.) 그리고 공개 키 부분에서 RSA (1024 Bits) 를 확인합니다.


[인증서 보기 - 자세히]


SSL 설치가 완료 되었습니다.
출처 : http://www.anycert.co.kr/support/4_1ssl_install_cer05_2.html