目录:
方案1:自签名证书
方案2:CA中心签名
方案1:自签名证书
它使用 X.509 证书,由可信任第三方(Certificate Authority (CA))进行数字签名的一个标准格式的数据。有效的数字签名意味着已签名的数据没有被篡改。如果签名的数据被更改,将不会通过验证。
方案一采用自签名证书,由自己签发,便于测试时使用。
环境:red hat enterprise linux 6.3,已按照上一篇文章的步骤搭建好openldap server。
IP:192.168.0.254
1.Server制作自签名证书
# cd /etc/openldap/certs/
# openssl genrsa -out ldap.key 1024
# openssl req -new -key ldap.key -out ldap.csr//生成签名请求
openssl req 接受生成密钥对的公共部分,添加一些位置信息,并将结果打包为Certificate Signing Request (CSR)由CA中心签署。
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.',the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg,city) [Default City]:
Organization Name (eg,company) [Default Company Ltd]:
Organizational Unit Name (eg,section) []:
Common Name(eg,your name or your server's hostname)[]:master.example.com//主机名用FQDN格式
Email Address []:root@master.example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
# openssl x509 -req -days 1095 -in ldap.csr -signkey ldap.key -out ldap.crt//公钥(自签名)
完成自签名证书的制作,ldap.key(私钥)、ldap.crt(证书、公钥)。
2.修改目录权限及所有者
# chmod 700 certs/
# chown ldap.ldap certs/ -R
# vim /etc/openldap/ldap.conf
TLS_CACERTDIR
TLS_REQCERT allow
# vim /etc/openldap/slapd.conf
TLSCertificateFile /etc/openldap/certs/ldap.crt
TLSCertificateKeyFile /etc/openldap/certs/ldap.key
# service slapd stop
# rm -rf /etc/openldap/slapd.d/*
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
# chown ldap.ldap /etc/openldap/slapd.d/ -R
# slapd -h "ldaps:///"
5.客户端配置及测试
先利用setup工具配置,在# vim /etc/openldap/ldap.conf添加
TLS_REQCERT allow
TLS_CACERTDIR /etc/openldap/cacerts
URI ldaps://192.168.0.254
BASE dc=example,dc=com
客户端测试
1.#ldapwhoami -v -x -Z
ldap_initialize( )
ldap_start_tls: Operations error (1)
anonymous
Result: Success (0)
2.ldaps验证用户密码
#ldapwhoami -D "uid=ldapuser1,ou=People,dc=example,dc=com" -W -H ldaps://192.168.0.254 -v
ldap_initialize( ldaps://192.168.0.254:636/??base )
Enter LDAP Password:
dn:uid=ldapuser1,sans-serif; font-size:16px; line-height:25.6px"> Result:Success(0)
-D 指定distinguish name
-W提示输入密码
-H 使用ldap://或ldaps://协议
-h IP
-v详细信息
3.搜索ldap服务器域信息
# ldapsearch -x -b "dc=example,dc=com" -Hldaps://192.168.0.254
方案2:Ca中心签名
Ca中心简介
CA中心 — 证书授权(Certificate Authority)中心,是电子商务交易中受信任的权威第三方,用来验证公钥合法性的机构。CA中心为每个使用公钥的客户发放数字证书,数字证书的作用是证明证书中列出的客户合法拥有证书中列出的公钥。CA机构的数字签名使得第三者不能伪造和篡改证书。它负责产生、分配并管理所有参与网上信息交换各方所需的数字证书,因此是安全电子信息交换的核心。
CA中心,是PKI(Public Key Infrastructure)体系的核心。它为客户的公钥签发公钥证书、发放证书和管理证书,并提供密钥生命周期内的管理服务。它将客户的公钥与客户的名称及其他属性关联起来,为客户之间电子身份进行认证。
CA中心在密码管理方面的作用如下:
1.
从根CA开始到直接给客户发放证书的各层次CA,都有其自身的密钥对。CA中心的密钥对一般由硬件加密服务器在机器内直接产生,并存储于加密硬件内,或以一定的加密形式存放于密钥数据库内。加密备份于IC卡或其他存储介质中,并以高等级的物理安全措施保护起来。密钥的销毁要以安全的密钥冲写标准,彻底清除原有的密钥痕迹。需要强调的是,根CA密钥的安全性至关重要,它的泄露意味着整个公钥信任体系的崩溃,所以CA的密钥保护必须按照最高安全级的保护方式来进行设置和管理。
2.为认证中心与各地注册审核发放机构的安全加密通信提供安全密钥管理服务
在客户证书的生成与发放过程中,除了有CA中心外,还有注册机构、审核机构和发放机构(对于有外部介质的证书)的存在。行业使用范围内的证书,其证书的审批控制,可由独立于CA中心的行业审核机构来完成。CA中心在与各机构进行安全通信时,可采用多种手段。对于使用证书机制的安全通信,各机构(通信端)的密钥产生、发放与管理维护,都可由CA中心来完成。
3.确定客户密钥生存周期,实施密钥吊销和更新管理
每一张客户公钥证书都会有有效期,密钥对生命周期的长短由签发证书的CA中心来确定。各CA系统的证书有效期限有所不同,一般大约为2~3年。
密钥更新有以下两种情况:密钥对到期、密钥泄露后需要启用新的密钥对(证书吊销)。
采用证书的公钥吊销,是通过吊销公钥证书来实现的。公钥证书的吊销来自于两个方向,一个是上级的主动吊销,另一个是下级主动申请证书的吊销。当上级CA对下级CA不能信赖时(如上级发现下级CA的私钥有泄露的可能),它可以主动停止下级CA公钥证书的合法使用。当客户发现自己的私钥泄露时,也可主动申请公钥证书的吊销,防止其他客户继续使用该公钥来加密重要信息,而使非法客户有盗取机密的可能。一般而言,在电子商务实际应用中,可能会较少出现私钥泄露的情况,多数情况是由于某个客户由于组织变动而调离该单位,需要提前吊销代表企业身份的该客户的证书。
4.提供密钥生成和分发服务
CA中心可为客户提供密钥对的生成服务,它采用集中或分布式的方式进行。在集中的情形下,CA中心可使用硬件加密服务器,为多个客户申请成批的生成密钥对,然后采用安全的信道分发给客户。也可由多个注册机构(RA)分布生成客户密钥对并分发给客户。
5.提供密钥托管和密钥恢复服务
CA中心可根据客户的要求提供密钥托管服务,备份和管理客户的加密密钥对。当客户需要时可以从密钥库中提出客户的加密密钥对,为客户恢复其加密密钥对,以解开先前加密的信息。这种情形下,CA中心的密钥管理器,采用对称加密方式对各个客户私钥进行加密,密钥加密密钥在加密后即销毁,保证了私钥存储的安全性。密钥恢复时,采用相应的密钥恢复模块进行解密,以保证客户的私钥在恢复时没有任何风险和不安全因素。同时,CA中心也应有一套备份库,避免密钥数据库的意外毁坏而无法恢复客户私钥。
CA中心在自身密钥和客户密钥管理方面的特殊地位和作用,决定了它具有主密钥、多级密钥加密密钥等多种密钥的生成和管理功能。
对于为客户提供公钥信任、管理和维护整个电子商务密码体系的CA中心来讲,其密钥管理工作是一项十分复杂的任务,它涉及到CA中心自身的各个安全区域和部件、注册审核机构以及客户端的安全和密码管理策略。
一、建立Ca中心
1.
[ CA_default ]
dir
certs
crl_dir
database
new_certs_dir
certificate
serial
crlnumber
crl
private_key
…
default_days
default_crl_days
[ policy_match ]策略匹配
countryName
stateOrProvinceName
organizationName
organizationalUnitName
commonName
emailAddress
[ req_distinguished_name ]
countryName_default
stateOrProvinceName_default
localityNmae_default
0.organizationName_default
# cd /etc/pki/tls/
# mkdir {certs,netcerts,crl}
# touch index.txt
# echo "00" > serial
2.
# (umask 077 ; openssl genrsa -out /etc/pki/CA/private/my-ca.key -des3 1024)
# (umask 077 ; openssl genrsa -des3 1024 > /etc/pki/CA/private/my-ca.key )
pass phrase:
3.
# openssl req -new -x509 -key /etc/pki/CA/private/my-ca.key > /etc/pki/CA/my-ca.crt
按照x509格式签发公钥(证书)
Enter pass phrase for /etc/pki/CA/private/my-ca.key: redhat
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BeiJing]:
Common Name (eg,your name or your server's hostname) []:master.example.com
Email Address []:root@master.example.com
4.
# yum install vsftpd
# cp /etc/pki/CA/my-ca.crt /var/ftp/my-ca.crt
# service vsftpd restart;chkconfig vsftpd on
CA中心配置结束
二、客户机公钥签名
客户机生成请求,csr -> CA签发 -> crt -> 拷回客户机已签名的证书
1.
# openssl genrsa -des3 1024 > /etc/openldap/certs/ldap.key
2.
# openssl req -new -key /etc/openldap/certs/ldap.key -out /etc/openldap/certs/ldap.csr
Enter pass phrase for /opt/httpd.key:redhat
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BeiJing
Example,Inc.
--------以上信息要和CA中心一样---------
Email Address []:root@desktop9.example.com
A challenge password []:
An optional company name []://可选的公司名称
3.
# scp ldap.csr 192.168.0.254:/root/
CA端 签发证书:
# openssl ca -in /root/ldap.csr -out /root/ldap.crt
mkdir /etc/pki/CA/newcerts
touch /etc/pki/CA/index.txt
echo "00" > /etc/pki/CA/serial
报错:
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/my-ca.key:
Check that the request matches the signature
Signature ok
The stateOrProvinceName field needed to be the same in the
CA certificate (BeiJing) and the request (BeiJing)//需要相同的字段
因为Rhel 5默认用MD5 1024位加密,Rhel 6用SHA-512 2048位加密。
(可在/etc/pki/tls/openssl.cnf修改)
Certificate Details:
Certificate is to be certified until Dec 17 12:14:57 2013 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified,commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
成功~!把签名证书和CA证书导入客户机。
OpenSSL相关命令:
创建CA中心:( umask 77; openssl genrsa -out private/my-ca.key -des3 2048 )
openssl req -new -x509 -key private/my-ca.key -days 365 > my-ca.crt
私钥加密:openssl rsa -in encrypted.key -out unencrypted.key
私钥解密:openssl rsa -in unencrypted.key -out encrypted.key
生成私钥:( umask 77; openssl genrsa 1024 > dovecot.key )
生成CSR:(umask 77; openssl req -new -key somefile.key -out somefile.csr )
可用/etc/pki/tls/certs/Makefile创建CSR
查看CSR:openssl req -noout -in somefile.csr -text
创建CA签名证书:openssl ca -in my.csr -out my.crt
证书吊销:openssl ca -revoke badcert.crt
生成证书吊销列表CRL:openssl ca -gencrl -out revoked.crl
生成DER供firefox使用:openssl crl -in revoked.crl -outform. DER -out revoked.der.crl
检查CRL内容:openssl crl -in revoked.crl -noout -text
创建证书的另一种方法:
1.创建证书(certificate)
分为3个步骤:
1.
2.
3.
需要特别注意创建证书时,输入Common Name的时候一定要输入目标机器的fully qualified name。
1.1创建CA
/etc/pki/tls/misc
/etc/pki/CA
/etc/pki/CA/cakey.pem//CA私钥
/etc/pki/CA/cacert.pem
tips:如果脚本检测到/etc/pki/CA下面有文件存在,会安静的退出,不会创建任何东西。
把/etc/pki/CA下的文件全部删除,script就可以正常工作了。
# cd /etc/pki/tls/misc
# ./CA -newca
[usage: ./CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify]
Making CA certificate ...
Generating a 2048 bit RSA private key
...................................+++
..............................+++
writing new private key to '/etc/pki/CA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
server.example.com
Email Address []:root@server.example.com
A challenge password []://csr密码
An optional company name []://公司名
Enter pass phrase for /etc/pki/CA/private/./cakey.pem:
Certificate is to be certified until Dec 20 15:52:28 2015 GMT (1095 days)
1.2创建server证书
下面创建ldap server的证书。
分为两步:
第一步生成证书请求
第二步让CA签发证书
# ./CA -newreq-nodes
............................................................................................................................................+++
...........................................................................................+++
writing new private key to 'newreq.pem'
Email Address []:root@ldap.example.com
Request (and private key) is in newreq.pem
# ./CA -sign
Enter pass phrase for ../../CA/private/cakey.pem:ca私钥密码
.....省略部分内容......
Certificate is to be certified until Apr 16 22:37:14 2008 GMT (365 days)
Signed certificate is in newcert.pem
完成两个步骤后,在当前目录下创建了2个文件:
/etc/pki/tls/misc/newreq.pem
/etc/pki/tls/misc/newcert.pem
然后设置合适的权限,私钥文件要设为只有owner能读。否则ssl安全体系形同虚设!
# mv newcert.pem server.crt ; chmod 644 server.crt
# mv newreq.pem server.key ; chmod 600 server.key
最后把这两个文件和CA的证书拷贝到Openldap Server存放证书的目录下
# mv server.crt /etc/openldap/certs/
# mv server.key /etc/openldap/certs/
# cp ../../CA/cacert.pem /etc/openldap/certs/
1.3创建client证书
创建client证书要注意:
1)输入Common Name的时候一定要输入client的fully qualified name!
2)证书、私钥和ca证书要拷贝到客户端的/etc/openldap/cacerts中。
三、将签名证书和CA证书导入ldap server
1.
# cp /etc/pki/CA/my-ca.crt /etc/openldap/certs/
# ls /etc/openldap/certs/
ldap.crt(已签名ldap服务器公钥)
ldap.csr(ldap服务器签名请求)
ldap.key(ldap服务器私钥)
my-ca.crt(CA证书)
# openssl rsa -in/etc/openldap/certs/ldap.key-out /etc/openldap/certs/ldap.key- //解密私钥,使启动时不需要输入私钥解密密码。(否则查询一次就要输入一次私钥密码,这个可以在调试模式下验证。[#slapd -d 256 -h “ldaps:///”])
# mv /etc/openldap/certs/ldap.key /etc/openldap/certs/ldap.key.encrypt
# mv /etc/openldap/certs/ldap.key- /etc/openldap/certs/ldap.key
2.修改权限及所有者
# chmod 700 /etc/openldap/certs/
# chmod 600 /etc/openldap/certs/ldap.key
# cp ldap.conf ldap.conf.bak;cp slapd.conf slapd.conf.bak//备份配置文件
TLS_CACERTDIR
TLSVerifyClient never
TLSCACertificatePath
TLSCACertificateFile
TLSCertificateFile
TLSCertificateKeyFile
TLSVerifyClient[never、allow、try、demand]
设置是否验证客户端发起的tls连接。
never:默认选项,不验证客户端证书。
allow:检查客户端证书,没有证书或证书错误,都允许连接。
try:检查客户端证书,没有证书(允许连接),证书错误(终止连接)。
demand | hard | true:检查客户端证书,没有证书或证书错误都将立即终止连接。
启用非默认TLSVerifyClient设置,为了使用外部身份验证机制和SASL TLS会话。
四、客户端配置(将ca证书导入)及测试
利用setup配置
# scp certs/my-ca.crt 192.168.0.18:/etc/openldap/cacerts/
在# vim /etc/openldap/ldap.conf添加
TLS_CACERT /etc/openldap/cacerts/my-ca.crt//ca证书
URI ldaps://master.example.com//要与证书中的域名一样
TLS_REQCERT demand
TLS_REQCERT [never、allow、try、demand | hard]
设置是否在TLS会话中检查server证书。
Never:不检查任何证书。
Allow:检查server证书,没有证书或证书错误,都允许连接。
Try:检查server证书,没有证书(允许连接),证书错误(终止连接)。
demand | hard:检查server证书,没有证书或证书错误都将立即终止连接。(默认)
1.#ldapwhoami -v -x -Z
master.example.com-v
ldap_initialize( ldaps://master.example.com:636/??base )
master.example.com
4.用openssl client连接ssl服务器
连接openssl服务器可以查看证书信息,加密方式等信息。
服务器不需要验证客户端:
# openssl s_client -connect server.example.com:636 -showcerts -state \
-CAfile /etc/openldap/cacerts/my-ca.crt
服务器需要验证客户端:
# openssl s_client -connect master.example.com:636 -showcerts -state \
-CAfile /etc/openldap/cacerts/my-ca.crt \
-cert /etc/openldap/cacerts/client.crt \
-key /etc/openldap/cacerts/client.key
调试方法:
配置完成以后,总是不能查询ldap条目。运行调试以后,在终端显示如下信息。原来是我的ldap.key没有解密,导致每次查询都要输入私钥密码。
# slapd-d 256-h "ldaps:///"
conn=1000 fd=12 ACCEPT from IP=192.168.0.18:48343 (IP=0.0.0.0:636)
Please enter pin,password,or pass phrase for security token 'PEM Token #0':
TLS: could not authenticate to the security token PEM Token #0 - error -8025:A PKCS #11 module returned CKR_GENERAL_ERROR,indicating that an unrecoverable error has occurred..
TLS: error: unable to authenticate to the security device for certificate PEM Token #0:ldap.crt - 0
TLS: error: could not initialize moznss security context - error -8025:A PKCS #11 module returned CKR_GENERAL_ERROR,indicating that an unrecoverable error has occurred.
TLS: can't create ssl handle.
conn=1000 fd=12 closed (TLS negotiation failure)
私钥有密码~!!!需要解密,否则每次查询都要输入密码。
conn=1001 fd=12 ACCEPT from IP=192.168.0.18:48361 (IP=0.0.0.0:636)
TLS: error: accept - force handshake failure: errno 11 - moznss error -12195
TLS: can't accept: TLS error -12195:Peer does not recognize and trust the CA that issued your certificate..
conn=1001 fd=12 closed (TLS negotiation failure)