好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

设置CA证书来强化PostgreSQL的安全性的教程

在经历了多次的摸索实验后我终于成功地实现了SSL证书认证的功能,因此我想这次我要把这些步骤记录下来供日后查阅。

出于安全和方便的原因,我要在一台单独的专用机器上签署客户的证书,这台机器也称为 证书授证中心(CA)。

这让我们在授权新的客户端时不必先登录到PostgreSQL服务器然后再签署证书或者修改pg_hba.conf。

我们要创建一个特殊的数据库组,叫sslcertusers。这个组里的所有用户都可以通过由CA签署的证书进行连接。

在下面的例子中,请将"trustly"替换成你的公司名或组织名。所有的命令都是基于Ubuntu Linux 12.04 LTS。
 
设置CA
CA应该是一台离线的处于高度安全环境中的计算机。

生成CA私钥
 

?

1

2

3

sudo openssl genrsa -des3 -out /etc/ssl/private/trustly-ca .key 2048

sudo chown root:ssl-cert /etc/ssl/private/trustly-ca .key

sudo chmod 640 /etc/ssl/private/trustly-ca .key

生成CA证书
 

?

1

2

3

4

5

sudo openssl req -new -x509 -days 3650 \

-subj '/C=SE/ST=Stockholm/L=Stockholm/O=Trustly/CN=trustly' \

-key /etc/ssl/private/trustly-ca .key \

-out /usr/local/share/ca-certificates/trustly-ca .crt

sudo update-ca-certificates

配置PostgreSQL服务器
生成PostgreSQL服务器私钥
 

?

1

2

3

4

5

6

7

8

# Remove default snakeoil certs

sudo rm /var/lib/postgresql/9 .1 /main/server .key

sudo rm /var/lib/postgresql/9 .1 /main/server .crt

# Enter a passphrase

sudo -u postgres openssl genrsa -des3 -out /var/lib/postgresql/9 .1 /main/server .key 2048

# Remove the passphrase

sudo -u postgres openssl rsa - in /var/lib/postgresql/9 .1 /main/server .key -out /var/lib/postgresql/9 .1 /main/server .key

sudo -u postgres chmod 400 /var/lib/postgresql/9 .1 /main/server .key

生成PostgreSQL服务器证书签署请求(CSR)

 

?

1

sudo -u postgres openssl req -new -nodes -key /var/lib/postgresql/9 .1 /main/server .key -days 3650 -out /tmp/server .csr -subj '/C=SE/ST=Stockholm/L=Stockholm/O=Trustly/CN=postgres'

用CA私钥签署PostgreSQL服务器证书请求
 

?

1

2

3

4

5

sudo openssl req -x509 \

-key /etc/ssl/private/trustly-ca .key \

- in /tmp/server .csr \

-out /var/lib/postgresql/9 .1 /main/server .crt

sudo chown postgres:postgres /var/lib/postgresql/9 .1 /main/server .crt

创建根(root)证书=PostgreSQL服务器证书+CA证书
 

?

1

2

3

sudo -u postgres sh -c 'cat /var/lib/postgresql/9.1/main/server.crt /etc/ssl/certs/trustly-ca.pem &gt; /var/lib/postgresql/9.1/main/root.crt'

sudo cp /var/lib/postgresql/9 .1 /main/root .crt /usr/local/share/ca-certificates/trustly-postgresql .crt

sudo update-ca-certificates

授权访问
 

?

1

2

3

4

5

CREATE GROUP sslcertusers;

ALTER GROUP sslcertusers ADD USER joel;

 

# /etc/postgresql/9.1/main/pg_hba.conf:

hostssl nameofdatabase +sslcertusers 192.168.1.0/24 cert clientcert=1

重启PostgreSQL
 

?

1

sudo service postgresql restart

PostgreSQL客户端设置
从PostgreSQL服务器上复制根证书
 

?

1

2

mkdir ~/.postgresql

cp /etc/ssl/certs/trustly-postgresql .pem ~/.postgresql /root .crt

生成PostgreSQL客户端私钥
 

?

1

2

3

4

openssl genrsa -des3 - out ~/.postgresql/postgresql. key 1024

 

# If this is a server, remove the passphrase:

openssl rsa - in ~/.postgresql/postgresql. key - out ~/.postgresql/postgresql. key

生成PostgreSQL客户端证书签署请求并签署
 

?

1

2

3

4

5

# Replace "joel" with username:

openssl req -new -key ~/.postgresql /postgresql .key -out ~/.postgresql /postgresql .csr -subj '/C=SE/ST=Stockholm/L=Stockholm/O=Trustly/CN=joel'

sudo openssl x509 -req - in ~/.postgresql /postgresql .csr -CA /etc/ssl/certs/trustly-ca .pem -CAkey /etc/ssl/private/trustly-ca .key -out ~/.postgresql /postgresql .crt -CAcreateserial

sudo chown joel:joel -R ~/.postgresql

sudo chmod 400 -R ~/.postgresql /postgresql .key

查看更多关于设置CA证书来强化PostgreSQL的安全性的教程的详细内容...

  阅读:36次