Special:Communication & Concept/VMware에 프리비에스디(FreeBSD 11.x)에 웹서버 Apache 2.4, MariaDB 10.1.23_2, PHP 7.1, Let's Encrypt 인증서, 웹 프로토콜(Web's protocol) HTTP/2 에 미디어위키...

Jump to: navigation, search
#166 [ Ssam ] hit: 222(#21ff21) 3

들어가기

  • VMware에 프리비에스디(FreeBSD 11.x)에 웹서버 Apache 2.4, MariaDB 10.1.23_2, PHP 7.1, Let's Encrypt 인증서, 웹 프로토콜(Web's protocol) HTTP/2 에 미디어위키 설치
  • FreeBSD 와 ubuntu 서버 설정을 거의 같은 설정을 해놓고 속도비 교해 보면 FreeBSD가 아주 빠르게 실행된다. APM실행에서 약2배 정도? 왜?( 문서도 많이 없고, 설정이 많이 불편 하지만 기대해 봅니다. 어찌하겠나 빠른걸~~)

프리비에스디(FreeBSD 11.x) 한글 설정

  • 미디어위키에 봇을 돌려 특정부분를 한글로 치환해야되는 경우가 있어서 설정 함.
  • 두개 파일 /etc/login.conf 와 /etc/profile 설정하면 된다. (시스템 전체 설정임.)
  • vi로 열어 /etc/login.conf 파일을 열어 추가 (84라인 쯤에, 러시아어가 설정되어있는 것을 아래와 같이 변경)
korean|Korean Users Accounts:\
    :charset=UTF-8:\
    :lang=ko_KR.UTF-8:\
    :tc=default:
  • /etc/login.conf 재작성 후 디비 업데이트 명령 실행.
#cap_mkdb /etc/login.conf
  • vi로 열어 /etc/profile파일을 열어 추가 ( 20라인 쯤에)
LANG=ko_KR.UTF-8; export LANG
MM_CHARSET=UTF-8; export MM_CHARSET
  • 재부팅
#reboot
  • 로케일 확인
#locale
메세지 출력
LANG=ko_KR.UTF-8
LC_CTYPE="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES="ko_KR.UTF-8"
LC_ALL=


Apache 2.4 설치

  • Apache 최신 패키지 검색
#pkg search apache
메세지 apache24
apache24-2.4.27 Version 2.4.x of Apache web server


#pkg install apache24
또는
#cd /usr/ports/www/apache24/ && make install clean
Proceed with this action? y
.........
메세지 잘 읽어 보면 /etc/rc.conf 파일에 apache24_enable="YES" 추가 하라고 나온다, vi로 열어서 추가해도 되고, 아래 명령으로도 추가 된다.
#sysrc apache24_enable=YES
  • 아파치 재시작
#service apache24 restart
  • 웹브라우저 주소 줄에 아이피 주소 넣으면 이런 메세지 보이면 정상이다.
http://192.168.0.100
It works!
  • 웹 루트는 /usr/local/www/apache24/data 디렉토리 이다.


MariaDB 설치

  • 데이터 베이스는 개인 취향에 맞는거로 1개만 설치하면 된다.
  • 최신 버전을 설치하기 위해서 설치전 검색
#pkg search maria
메세지 출력 최신 버전 클라이언트 서버
mariadb100-client-10.0.31_1 Multithreaded SQL database (client)
mariadb100-server-10.0.31_1 Multithreaded SQL database (server)
mariadb101-client-10.1.23_2 Multithreaded SQL database (client)
mariadb101-server-10.1.23_2 Multithreaded SQL database (server)
mariadb102-client-10.2.6_2 Multithreaded SQL database (client)
mariadb102-server-10.2.6_2 Multithreaded SQL database (server)


  • 여기서는 mariadb101를 설치 한다.(mariadb101-client-10.1.23_2, mariadb101-server-10.1.23_2)
#pkg install mariadb101-server
메세지 출력

[............................]

Proceed with this action? [y/N]: y
메세지에 디비 설정 관련 메세지가 출력된다.
  • db설정 파일 만들기 /usr/local/share/mysql/my-medium.cnf 샘플 파일을 /usr/local/etc/my.cnf 파일로 복사하여 만든다.
  • db 샘플 파일은 /usr/local/share/mysql/ 디렉토리에 여러개(my-innodb-heavy-4G.cnf, my-huge.cnf, my-large.cnf, my-medium.cnf, my-small.cnf, 이중에서 선택하면 된다.)
서버 메모리에 따라 선택 한다.
  1. my-innodb-heavy-4G.cnf: 4G (innodb 사용)
  2. my-huge.cnf: 1~2G
  3. my-large.cnf 512M
#cp /usr/local/share/mysql/my-innodb-heavy-4G.cnf /usr/local/etc/my.cnf
  • 에디터로 vi /etc/rc.conf 파일을 열어 mysql_enable="YES"을 추가해도 되고, 아래 명령으로 추가해도 된다.
#sysrc mysql_enable=YES
  • db서버 재시작
#service mysql-server restart
  • mysql 암호 설정
#mysql_secure_installation
메세지 출력
Enter current password for root (enter for none): 현재 암호 공백이므로 그냥 엔터
Set root password? -> y
New password: 루트암호
Re-enter new password: 다시한번 루트암호
Remove anonymous users? -> y
Disallow root login remotely? -> y
Remove test database and access to it? -> y
Reload privilege tables now? -> y
  • db서버 재시작
#service mysql-server restart


php 7.1 설치

  • php 최신 패키지 찾기
#pkg search php
메세지 출력
[...............]
php71-7.1.7 PHP Scripting Language
php71-bcmath-7.1.7 The bcmath shared extension for php
php71-bz2-7.1.7 The bz2 shared extension for php
php71-calendar-7.1.7 The calendar shared extension for php
php71-ctype-7.1.7 The ctype shared extension for php
[................]


  • PHP 7.1, 아파치피에치 모듈(Apache module), php 7.1을 위한 DB 확장 모듈 설치.(mediawiki, 기타, 설치를 위한 모듈, 캐쉬 부분...)
  • mediawiki1.27.x 설치시 요구사항
ctype, iconv, json, mbstring, xml, 캐쉬확장 선택사항.
  • 필요한 것 확인 후 추가 한다.
#pkg install php71 mod_php71 php71-mysqli php71-extensions php71-curl php71-fileinfo php71-exif php71-xmlrpc php71-sockets php71-pdo php71-pdo_dblib php71-pdo_mysql php71-imap php71-intl php71-calendar php71-gettext php71-bz2 php71-ftp php71-gd php71-openssl php71-zip php71-zlib php71-mcrypt php71-mbstring
  • php.ini-production 파일을 /usr/local/etc/ 디렉토리에 복사 한다.
#cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
  • 아파치 재시작
#service apache24 restart


아파치(apache 2.4) 설정

  • apache 2.4 설정 파일 vi /usr/local/etc/apache24/httpd.conf 파일을 열어 수정, 추가해 준다.
215 라인에 ServerAdmin 관리자 메일 주소를 수정 한다.
ServerAdmin ssam@zbm.kr
224 라인에 ServerName 수정 (외부로 연결된 사설 아이피)
ServerName 192.168.0.100:80
282 라인에 DirectoryIndex index.html 이렇게 된것을 아래와 같이 index.php 추가
<IfModule dir_module>
  DirectoryIndex index.php index.html
</IfModule>
535 라인(맨끝 라인)에 Include etc/apache24/Includes/*.conf 줄 밑에 추가 해 준다.( /usr/local/etc/apache24/Includes/ 이 디렉토리에 파일을 만들어서 추가 해도 됨)
Include etc/apache24/Includes/*.conf

<FilesMatch "\.php$">
   SetHandler application/x-httpd-php
</FilesMatch>

<FilesMatch "\.phps$">
   SetHandler application/x-httpd-php-source
</FilesMatch>
  • 아파치 재시작.
#service apache24 restart


  • info.php 파일을 만들어 확인 한다.
#vi /usr/local/www/apache24/data/info.php
파일을 열어 추가
<?php
    phpinfo();


  • 웹브라우저 주소 줄에 아이피 주소 넣어 정보가 보이면 정상 이다.
http://192.168.0.100/info.php
확인 한 후 삭제 한다.
#rm /usr/local/www/apache24/data/info.php
메인 웹 디렉토리 위치는 /usr/local/www/apache24/data 가 된다.
여기에 웹페이지를 만들어 놓으면 된다.


가상 호스트 설정

  • 여기서는 메인 웹 루트가 /usr/local/www/apache24/data/ 이지만 사용하지 않는다.
  • 사용자 디렉토리를 사용 하면서 가상 호스트로 설정.
  • 아파치 설정 파일 vi /usr/local/etc/apache24/httpd.conf 를 열어 주석 해제
171 라인 주석 해제
LoadModule vhost_alias_module libexec/apache24/mod_vhost_alias.so
177 라인 주석 해제
LoadModule userdir_module libexec/apache24/mod_userdir.so
502 라인 주석 해제
Include etc/apache24/extra/httpd-userdir.conf
508 라인 주석 해제
Include etc/apache24/extra/httpd-vhosts.conf


  • 이 샘플 파일 vi /usr/local/etc/apache24/extra/httpd-userdir.conf 을 열어 다 지우고 이렇게 설정 한다.
  • httpd-userdir.conf 파일 열어 보면 요구되는 모듈이듈 보인다.
mod_authz_core, mod_authz_host, mod_userdir 3를 요구한다.
mod_authz_core, mod_authz_host 두개는 기본적으로 해제되어 있다.
<IfModule mod_userdir.c>
       UserDir www/html
       UserDir disabled root

       <Directory /usr/home/*/www/html>
#               AllowOverride FileInfo AuthConfig Limit Indexes
#               Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
               AllowOverride All

               <Limit GET POST OPTIONS>
                       Require all granted
               </Limit>
               <LimitExcept GET POST OPTIONS>
                       Require all denied
               </LimitExcept>
      </Directory>
</IfModule>
  • 이 샘플 파일 vi /usr/local/etc/apache24/extra/httpd-vhosts.conf 을 열어 수정 한다.(여기에 여러개 설정하여 여러개의 웹사이트를 구성 할 수 있다.)
 <VirtualHost *:80>
    ServerAlias www.zbm.kr
    ServerName zbm.kr 
    ServerAdmin ssam@zbm.kr 
    DocumentRoot "/usr/home/ssam/www/html"
 
    ErrorLog "/var/log/zbm.kr-error_log"
    CustomLog "/var/log/zbm.kr-access_log" common
 
    # SSL certificate  
    # Redirect permanent / https://zbm.kr/
 </VirtualHost>


사용자 디렉토리 만들고 퍼미션 조정

  • 사용자가 추가되어있지 않다면 사용자 추가, 여러 사용자를 추가 구성 할 수 있다.
#adduser
메세지 출력
[.......]
//그룹설정에서 일반 사용자면 엔터, 관리자면 wheel그룹에 가입.
Login group is due. Invite due into other groups? []
[.......]
  • 참고로 사용자 삭제 명령은
#rmuser


  • 디렉토리 만들기
#cd ~
#mkdir /usr/home/ssam/www
#mkdir /usr/home/ssam/www/html
  • 퍼미션 조정
#chmod 755 /usr/home/ssam/www/html
  • 그룹 변경: 소유자:소유자 그룹
#chown -R ssam:ssam /usr/home/ssam/www/html
  • 아파치 재시작
#service apache24 restart
  • 이제 메인 웹 루트가 변경 됬다. (사용자 계정으로 사용하기 위해서...)
/usr/home/*/www/html
퍼미션 조정하고 웹페이지를 만들어 놓으면 된다, 기본 퍼미션은 755 이다.


php 7.1 파일 업로드 사이즈 조정(cloud 설치)

  • 클라우드 설치 대비, upload_max_filesize 2000M, post_max_size 2001M, max_execution_time, max_input_time는 10배로, memory_limit는 2배로
  • 이 파일 vi /usr/local/etc/php.ini 을 열어 수정 한다.
383라인쯤에
max_execution_time = 300
393라인쯤에
max_input_time = 600
404라인쯤에
memory_limit = 256M
671라인쯤에
post_max_size = 2001M
824라인쯤에
upload_max_filesize = 2000M
이 부분을 찾아서 적당한 크기로 수정해 준다.
allow_url_fopen = off
  • 아파치 재시작
#service apache24 restart


phpMyAdmin 설치

  • phpMyAdmin 패기지로 설치하면 php 7.1 패키지를 지운다, ports로 설치
  • make clean 은 이전 컴파일 내용을 삭제, make distclean 은 파일을 받고 압축을 푼 처음 상태로 만드는 것.
  • 현재 포트 컴파일 phpMyAdmin 패기지는 4.7.3.버전이 설치된다.
#cd /usr/ports/databases/phpmyadmin && make config-recursive install distclean


모두 설치된 다음 메세지 출력, Apache version 2.4 상위 버전은 아래와 같이 추가 하라고 나온다.
For Apache version 2.4.x or above:
Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/"

    <Directory "/usr/local/www/phpMyAdmin/">
        Options None
        AllowOverride Limit

        Require local
        Require host .example.com
    </Directory>
  • 아파치 설정 파일 vi /usr/local/etc/apache24/httpd.conf 를 열어 아래와 같이 추가해 준다.(533라인 쯤에 추가, 맨끝.)
  • 참고 이 설정은 .htaccess 파일을 /usr/local/www/phpMyAdmin 디렉토리에 넣어 특정 사용자만 접속 가능하게 할 수 있다.
Alias /phpmyadmin "/usr/local/www/phpMyAdmin"
<Directory "/usr/local/www/phpMyAdmin">
   Options None
   AllowOverride all
   Require all granted
</Directory>


  • config.inc.php 복사
#cp /usr/local/www/phpMyAdmin/config.sample.inc.php /usr/local/www/phpMyAdmin/config.inc.php


  • 심볼링크로 /usr/local/www/apache24/data/ 웹루트 디렉토리에 링크를 건다.
#ln -s /usr/local/www/phpMyAdmin/ /usr/local/www/apache24/data/phpmyadmin
  • 아파치 재시작
#service apache24 restart
  • 웹브라우저 주소창에 아래 주소넣고 확인 해본다.
http://192.168.0.100/phpmyadmin


phpMyAdmin 에 config.inc.php 설정

  • 로그인 하면 하단에 $cfg['blowfish_secret']항목이 뜬다. 적당히 넣어 주면 된다.
이 파일 vi /usr/local/www/phpMyAdmin/config.inc.php 을 열어 넣어주면 된다.
17라인에
$cfg['blowfish_secret'] = '암호(@_@)6/3=2를-적어*놓으시오_쿠키에-필요=하다고^하니!'; 

.htaccess 파일 사용하기

  • .htaccess 파일을 사용하기 위해서 위에서 AllowOverride All 로 설정 했다.
  • 아파치 설정 파일 vi /usr/local/etc/apache24/httpd.conf 를 열어 주석 해제 한다.
179 라인 쯤에 주석 해제
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
  • 아파치 재시작
#service apache24 restart


phpMyAdmin의 .htaccess 엑세스 제어로 특정 IP 만 접속 가능

  • .htaccess 엑세스를 사용하기위한 준비는 다됬고 특정 디렉토리 또는 기능 각각 제어해 보기.
  • phpMyAdmin 제어 모든 IP는 막히고 그중 사설 아이피 중에 몇 개만 접속 가능하게 제어하여 본다.
  • vi /usr/local/www/phpMyAdmin/.htaccess 파일을 열어 처음 열면 아무것도 없음 아래와 같이 작성해 준다.
SetEnvIf remote_addr 192.168.0.3 go_in
SetEnvIf remote_addr 192.168.0.15 go_in
 
Order deny,allow
deny from all
allow from env=go_in
  1. 접속해보자 192.168.0.3로 접속되는 컴에서, http://192.168.0.200/phpmyadmin/로 설정된 서버에 , zbm.kr 도메인으로 외부로 연결되어있다.
  2. http://zbm.kr/phpmyadmin/ 도메인으로 연결된것으로 접속 해본다, 접속이 안되면 정상이다.
  3. http://192.168.0.200/phpmyadmin/ 사설 내부 192.168.0.3 아이피로 접속된 컴퓨터는 접속 된다.
  4. http://192.168.0.200/phpmyadmin/ 사설 내부 192.168.0.15 아이피로 접속된 컴퓨터는 접속 된다.
  5. 그 이외에 아이피들은
Forbidden
You don't have permission to access /phpmyadmin/ on this server.
이런 메세지들을 만나게 된다, 그러니까 외부에서는 접속불가이고 내부망에서도 특정 아이피만 접속 된다.


미디어위키 설치

미디어위키 다운로드

  • 다운로드된 파일을 계정에 업로드한다
  • 사용자 계정에서 디렉토리로 이동 후 압축 해제
#cd /usr/home/ssam/www/html
#tar xvzf mediawiki-1.27.x.tar.gz
  • 디렉토리를 wiki로 변경
#mv mediawiki-1.27.x wiki
  • 압축된 파일 삭제
#rm -f mediawiki-1.27.x.tar.gz
  • 그룹 변경: 소유자:소유자 그룹
#chown -R ssam:ssam /usr/home/ssam/www/html/wiki
  • 사용자 웹디렉토리 퍼미션 조정.(따로 설정 하지않아도 됨)
  • 웹브라우저에서 설치
http://zbm.kr/wiki
미디어위키 설치시 캐쉬를 설정하여 설치 한다, 로딩 속도가 10배는 빨라진다.
캐쉬 설정 방법은 아래 미디어위키 관련글을 참고
  • 미디어위키 설치 후 사용자 조정
  • 파일의 소유자와 그룹을 변경, php스크립트로 특정 디렉토리 또는 파일의 퍼미션을 조정하려면 소유자와 소유그룹을 데비안 계열은 www-data로 변경, FreeBSD 계열은 www로 변경 해야 php 스크립트로 특정 디렉토리를 원하는데로 퍼미션 조정을 할 수 있다.
  • 캐쉬 디렉토리와 파일의 소유자를 변경
#chown -R www:ssam /usr/home/ssam/www/html/wiki/cache
  • 이미지 디렉토리와 파일의 소유자를 변경
#chown -R www:ssam /usr/home/ssam/www/html/wiki/images
참고로 모든 디렉토리의 퍼미션은 755, 모든 파일의 퍼미션은 644 가 된다.


웹 페이지에 .htaccess 엑세스 제어로 특정 IP들 만 접속 제한

  1. 가장 좋은 방법은 막지않는 것 입니다.
  2. 웹 루트는 가상 호스트 사용자로 /usr/home/ssam/www/html 로 설정되어 있다.
  3. /usr/home/ssam/www/html 아래로 여러 프로그램들이 설치되어 있다.
  4. 특정 아이피 막어보자.
  5. http://httpd.apache.org/docs/2.0/ko/mod/mod_setenvif.html#setenvif 아파치 모듈 mod_setenvif 참조.
  6. SetEnvIfNoCase remote_addr 접속이 안되는 것이 아니라 403 Forbidden 을 호출함.
  7. SetEnvIf를 사용하지 않고 SetEnvIfNoCase 사용한 경우는 대소문자를 가리지 않는다.
  • 에디터로 열어 엑세스 파일을 작성해준다.
#vi /usr/home/ssam/www/html/.htaccess
  • .htaccess 파일의 내용
# 특정사용자별로 환경 설정을 할 수도 있다.
# PHP_VALUE mysql.default_charset UTF8
 
SetEnvIfNoCase remote_addr XX.XX.XXX.XX go_out
SetEnvIfNoCase remote_addr XXX.XX.*.* go_out
Order Allow,deny
Deny from env=go_out
Allow from all
참고로 XX.XX.XXX.XXX 이런 아이피 막음, 대량으로 막을때는 XXX.XX.*.* 이런식으로~.


FreeBSD 11.x 에 Let's Encrypt 인증서 프로그램 설치

  • certbot을 이용한다. 인증서 봇 페이지 참조
  • Certbot client 설치, 컴파일 또는 팩키지, 원하는거로 선택한다.
포트 컴파일로 설치
# cd /usr/ports/security/py-certbot && make install clean
패키지로 설치
# pkg install py27-certbot

FreeBSD 11.x 에 Let's Encrypt 인증서 설치

  • /usr/home/ssam/www/html 웹페이지가 설치된 경로, zbm.kr, www.zbm.kr 인증서가 적용될 도메인
Template:Del
  • 와일드카드 인증서 (Wildcard Certificate) 설치 방법
2018/3/13일 부터 DNS의 TXT 레코드를 이용하는 방식으로 지원한다.
  • 봇 버전 확인 : 0.22.0 이상 부터 지원한다.
#certbot --version
certbot 0.25.1 출력됨. (현재 FreeBSD 11.2버전, php 7.2, 기타 사용 함)
#certbot certonly --manual --email 이메일주소 --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d 'zbm.kr,*.zbm.kr'


-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for zbm.kr
dns-01 challenge for zbm.kr

-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: y

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.zbm.kr with the following value:

XXXUdTqbrGhL9us~ // 첫번째로 이 부분을 복사하여 DNS 관리하는곳에 붙여넣고 생성

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.zbm.kr with the following value:

XXXXXXXXXXXXXXXXXXXXXUEXbU03B~ // 두번째로 이 부분을 복사하여 DNS 관리하는곳에 붙여넣고 생성

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue


여기서 엔터치지 말고 DNS 관리하는 곳에 가서 TXT 관리(텍스트) 부분에서 생성

도메인: _acme-challenge.zbm.kr           텍스트(TXT):    XXXUdTqbrGhL9us~ 
도메인: _acme-challenge.zbm.kr           텍스트(TXT):    XXXXXXXXXXXXXXXXXXXXXUEXbU03B~ 

이렇게 만드신 후 ....

TXT 레코드를 정확하게 생성했으면 TXT 레코드가 반영되도록 어느 정도 시간을 기다린 뒤, 두 번째 Press Enter to Continue 메시지 엔터를 치면 인증서 설치를 한 후 메세지 출력.


Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /usr/local/etc/letsencrypt/live/zbm.kr-~~~~~/fullchain.pem
   Your key file has been saved at:
   /usr/local/etc/letsencrypt/live/zbm.kr-~~~~/privkey.pem
   Your cert will expire on 2018-11-17. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /usr/local/etc/letsencrypt. You should
   make a secure backup of this folder now. This configuration
   directory will also contain certificates and private keys obtained
   by Certbot so making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

  • 환경설정하라는 메세지 출력됨
  1. /usr/local/etc/letsencrypt/archive/zbm.kr 에 실제 인증서가 설치된다.
  2. 심볼 링크로 /usr/local/etc/letsencrypt/live/zbm.kr 에 링크가 걸린다.
  3. /usr/local/etc/letsencrypt/archive/zbm.kr 에 cert.pem, fullchain.pem, chain.pem, privkey.pem 4개의 파일이 생성된다.(리뉴얼시 파일 이름은 변경된다.)
  4. 4개파일을 USB에 백업받아 둔다.


FreeBSD 11.x 에서 아파치 Let's Encrypt 인증서 설정

  • 아파치에 SSL인증서 적용하기 vi /usr/local/etc/apache24/httpd.conf 파일을 열어서 주석 해제 한다.
70 라인에 주석 해제
LoadModule authn_socache_module libexec/apache24/mod_authn_socache.so
89 라인에 주석 해제
LoadModule cache_module libexec/apache24/mod_cache.so
91 라인에 주석 해제
LoadModule cache_socache_module libexec/apache24/mod_cache_socache.so
92 라인에 주석 해제
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
144라인 쯤에 주석 해제
LoadModule ssl_module libexec/apache24/mod_ssl.so
525라인 쯤에 주석 해제
Include etc/apache24/extra/httpd-ssl.conf
모두 변경 후 저장 한다.
  • 기타 모듈(memcache 사용)
94 라인에 주석 해제
LoadModule socache_memcache_module libexec/apache24/mod_socache_memcache.so

FreeBSD 11.x 에서 SSL 인증서 환경 설정 파일 설정

  • 이 위치 vi /usr/local/etc/apache24/extra/httpd-ssl.conf 에 파일을 열어 인증서 경로 수정한다.
  • 52 라인에 #SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4 주석 처리하고 추가(Let'sEncryt 인증서 라면, 처리 않하면 모바일기기에서 에러난다.)
vi /usr/local/etc/apache24/extra/httpd-ssl.conf 에 파일을 열어 수정.
#SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4
SSLCipherSuite "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA"
104라인쯤에 주석 해제 한다.
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
SSLStaplingStandardCacheTimeout 3600
SSLStaplingErrorCacheTimeout 600
  • 보안 강화지침 HSTS 설정
주소 수정하고 완료 됬으면, 보안강화 지침에따라 설정해 준다.
초 단위로 약 6개월 정도(15768000)가 설정되는 것임(6개월 권장, 6개월간 https로 강제 접속만 허용 한다.).
121 라인쯤에 수정
<VirtualHost _default_:443>
  # General setup for the virtual host
  ServerAlias www.zbm.kr
  ServerName zbm.kr
  ServerAdmin ssam@zbm.kr
  DocumentRoot "/usr/home/ssam/www/html"

   #Security, 보안 강화지침, 초 단위로 3개월간 강제로 https 만 접속 된다. 상황에 따라 추가해 주어야 한다
   <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=7884000; includeSubDomains; preload"
   </IfModule>

[........................................................]

</VirtualHost>


152 라인쯤에 인증서 경로 아래 내용 추가 한다.
#   parallel.
 
#Let's Encrypt add
SSLCertificateFile "/usr/local/etc/letsencrypt/live/zbm.kr/cert.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/zbm.kr/privkey.pem"
SSLCACertificateFile "/usr/local/etc/letsencrypt/live/zbm.kr/fullchain.pem"
158 라인에 경로 주석 처리
#SSLCertificateFile "/usr/local/etc/apache24/ssl/cert.crt"
168 라인쯤에 경로 주석 처리
#SSLCertificateKeyFile "/usr/local/etc/apache24/server.key"
  • 참고
이 파일의 경로 설정은 한번이면 족함, 리뉴얼 하여 파일명이 바뀌어도 변하지 않음, 심볼 링크만 변경 해 주면 된다. (봇이 한다.)
  • 아파치 재시작
service apache24 restart 


다른 인증서가 있다면

  • 아래 파일을 열어서 내용만 바꾸어 주면 된다.
vi /usr/local/etc/letsencrypt/live/zbm.kr/cert.pem
vi /usr/local/etc/letsencrypt/live/zbm.kr/privkey.pem
vi /usr/local/etc/letsencrypt/live/zbm.kr/fullchain.pem
  • 아파치 재시작
service apache24 restart 


인증서 갱신(renewal)

  • 인증서 기간이 만료되기전에 갱신
  • /usr/home/ssam/www/html 웹페이지가 설치된 경로, zbm.kr, www.zbm.kr 인증서가 적용될 도메인
#certbot certonly --webroot -w /usr/home/ssam/www/html -d zbm.kr -d www.zbm.kr


자동으로 리뉴얼(Automating renewal)

# certbot renew --dry-run
  • 아파치 재시작 해 주어야 갱신된다.
service apache24 restart


SSL 서버 테스트(SSL Server Test)

  • 여기 ssllabs에 가면 테스트 할 수 있다.


웹 프로토콜(Web's protocol) HTTP/2 적용

146라인쯤에 주석 제거.
LoadModule http2_module libexec/apache24/mod_http2.so
  • 이 파일 vi /usr/local/etc/apache24/extra/httpd-ssl.conf 을 열어 추가.
h2c : HTTP/2 (without TLS) 현재 지원하는 브라우저 없음, Protocols h2 h2c http/1.1
128 라인쯤에 추가, VirtualHost _default_
443 태그 안쪽에 DocumentRoot 있는데 아래에 추가한다.
Protocols h2 http/1.1
  • 아파치 재시작
service apache24 restart 


웹 프로토콜(Web's protocol) HTTP/2 적용 확인

  • 크롬브라우저에서 메뉴->도구더보기->개발자 도구(Ctrl + shift + i) 클릭하시고, Type항목에 오른쪽 마우스로 프로토콜 선택한 후, 테스트 하고싶은 사이트로 이동하여 트레킹 해보면, 네트워크 부분에서 프로토콜을 확인 할 수 있다.
  • edge 메뉴에 보면 개발자도구(F12) 있고 네트워크 부분에서 확인 가능하나, 현재 HTTP/2 일부분만 적용되는것 같다.


기타

  1. 설정 파일이 있는 곳 /usr/local/etc/ 이 디렉토리에 모여 있다.
  2. 참고 사항으로 정리하여 둠.
  3. 이 문서에 오류가 있다면 아래, 계속 업데이트 됩니다.

Logo