Openssl 업그레이드 하기.

Coumputer's/Linux 2010. 12. 9. 19:40

openssl을 업그레이드 하기 위해서는 먼저 최신버전의 openssl을 다운받는다.
필자는 openssl-0.9.8b에서 openssl-0.9.8p버전으로 업그레이드 하였으며 oepnssl소스는
http://www.openssl.org에서 받을 수 있다. 
(다이렉트 링크 : http://www.openssl.org/source/openssl-0.9.8p.tar.gz)

1. compile하기.
  다운받은 source를 압축해제하여 config명령어를 사용하여 Makefile을 만든다.
 필자는 oepnssl을 설치하는 것이 목적이 아니라 prefix나 openssldir옵션은 주지 않았으며
 업그레이드 하기 위해서는 shared 라이브러리가 생성되어야 함으로 shared옵션만 주었다.
 # ./config shared
 # make
 make명령어를 치면 current디렉토리에 library파일들이 생성이 되며 ./apps 디렉토리에는 
 openssl파일이 생성된다.

2. 설치하기
 libcrypto 설치하기
 먼저 새로 생성한 libcrypto파일을 /lib 디렉토리에 copy한다.
  # cp libcrypto.so.0.9.8 /lib/libcrypto.so.0.9.8p
 기존 0.9.8b 버전에 걸려 잇는 symbolic link를 지워주고 새로 link를 생성한다.
  # rm -rf libcrypto.so.6
  # ln -s libcrypto.so.0.9.8p libcrypto.so.6
  # ls -al
lrwxrwxrwx 1 root root 19 Dec 8 13:10 /lib/libcrypto.so.0.9.8 -> libcrypto.so.0.9.8p -rwxr-xr-x 1 root root 1241576 Oct 16 2007 /lib/libcrypto.so.0.9.8b -rwxr-xr-x 1 root root 1530219 Dec 8 13:09 /lib/libcrypto.so.0.9.8p lrwxrwxrwx 1 root root 19 Dec 8 13:09 /lib/libcrypto.so.6 -> libcrypto.so.0.9.8p

 추가로 /usr/lib디렉토리에도 libcrypto.a와 libcrypto.so파일을 생성해 준다.
  # cp {openssl소스 디렉토리}/libcrypto.a /usr/lib
  # cd /usr/lib
  # ln -s ../../lib/libcrypto.so.0.9.8p libcrypto.so.6
  # ls -al libcrypto*
    -rw-r--r-- 1 root root 2425450 Dec  8 16:11 /usr/lib/libcrypto.a
    lrwxrwxrwx 1 root root      29 Dec  8 16:12 /usr/lib/libcrypto.so -> ../../lib/libcrypto.so.0.9.8p

 libssl 설치는 libcrypto 설치의 /lib디렉토리와 같은 방식으로 설치하면 된다.
  # cp libssl.so.0.9.8 /lib/libssl.so.0.9.8p
  # rm -rf libssl.so.6
  # ln -s libssl.so.0.9.8p libssl.so.6
  # ls -al
    - rwxr-xr-x 1 root root 279336 Oct 16  2007 /lib/libssl.so.0.9.8b
    -rwxr-xr-x 1 root root 322722 Dec  8 13:11 /lib/libssl.so.0.9.8p
    lrwxrwxrwx 1 root root     16 Dec  8 13:12 /lib/libssl.so.6 -> libssl.so.0.9.8p

3. openssl바이너리와 openssl 헤더파일 바꿔주기.
 마지막으로 openssl바이너리와 openssl 헤더파일을 기존 파일에서 대체하면 된다.
 헤더파일을 바꾸어주는 것은 추후에 있을 ssl라이브러리를 사용하는 openssh와 같은 프로그램을 
 소스 설치시 필요하기 때문에 바꾸어 준다.^^
 which openssl로 찾아서 바꾸어주면 된다.  기본적으로 /usr/bin 디렉토리 밑에 openssl파일이 있다.
 헤더파일은 /usr/include/oepnssl/ 디렉토리를 통째로 바꾸어주면 된다.
  # cp ./apps/openssl /usr/bin
  cp: overwrite `/usr/bin/openssl'? y
  # rm -rf /usr/include/openssl
  # cp -rf ./include/openssl /usr/include

openssl 인증서 만들기

Coumputer's/Linux 2009. 3. 31. 18:04


$ openssl genrsa -out ca.key

$ openssl req -new -key ca.key -out ca.csr
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:bahdushka
Email Address []:

$ openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
Signature ok
subject=/C=US/ST=Some-State/O=Internet Widgits Pty Ltd/CN=bahdushka
Getting Private key

### now make a key that has a good cn just to make sure

$ openssl genrsa -out postgres.key

$ openssl req -new -key postgres.key -out postgres.csr
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:bahdushka
Email Address []:

$ openssl x509 -req -days 365 -CA ca.crt  -CAkey ca.key
-CAcreateserial -in postgres.csr -out postgres.crt
Signature ok
subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=bahdushka
Getting CA Private Key

$ cp ca.crt data/root.crt
$ cp ca.key data/root.key
$ cp postgres.crt data/server.crt
$ cp postgres.key data/server.key
$ rm ~/.postgresql/*

# restart postgres

$ SSLVERIFY=none ./psql junk -h bahdushka
psql: root certificate file (/home/alex/.postgresql/root.crt)

$ cp ca.crt ~/.postgresql/root.crt

$ SSLVERIFY=none ./psql junk -h bahdushka
psql (8.4devel)
Type "help" for help.

junk=#
LOG:  could not accept SSL connection: peer did not return a certificate

$ SSLVERIFY=cn ./psql junk -h bahdushka
psql (8.4devel)
Type "help" for help.

junk=#
LOG:  could not accept SSL connection: peer did not return a certificate

$ cp postgres.crt ~/.postgresql/postgresql.crt
$ cp postgres.key ~/.postgresql/postgresql.key
$ chmod 0600 ~/.postgresql/*

$ SSLVERIFY=cn ./psql junk -h 127.0.0.1
psql (8.4devel)
Type "help" for help.

junk=#
LOG:  could not receive data from client: Connection reset by peer

$ SSLVERIFY=cn ./psql junk -h bahdushka
psql (8.4devel)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

junk=#

### now make a crt that has a bad common name
$ openssl genrsa -out pg.key

$ openssl req -new -key pg.key -out pg.csr
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:asdf
Email Address []:

$ openssl x509 -req -days 365 -CA ca.crt -CAkey ca.key -CAcreateserial
-in pg.csr -out pg.crt
Signature ok
subject=/C=US/ST=Some-State/O=Internet Widgits Pty Ltd/CN=asdf
Getting CA Private Key

$ cp pg.crt ~/.postgresql/postgresql.crt
$ cp pg.key ~/.postgresql/postgresql.key
$ chmod 0400 ~/.postgresql/*

$ SSLVERIFY=cn ./psql junk -h bahdushka
psql (8.4devel)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

junk=#

### ok no difference here must be the other way bad cn on the server

 

!!!! 윈도우는 root인증서도 필요하다.