QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1157|回复: 5

建立自己的SSL CA. (图解)

[复制链接]
发表于 2004-3-17 02:21:25 | 显示全部楼层 |阅读模式
看到别人网站提供SSL认证服务而自己的没有, 或者自己在使用客户端软件发送邮件时, 发现自己只好看着列表中的那些收费认证公司的名单而却苦于囊中羞涩而无法使用? 为什么不使用自己的Linux服务器自己做一个呢?

下面就跟着我一步一步的地来实验一下, 看看自己如何制作认证(Certificate Authority, 简称CA).

当然, 要制作自己的SSL CA, 首先要确定自己的机器上装了OpenSSL, 它带有的CA.pl工具让制作自己的CA再简单不过了.

那么第一步: 让我们先登录到要用来制作CA的Linux机器上吧. 我在练习的或给别人做例子的时候习惯使用学校的账号, 当然你使用自己本地的Linux box也没关系.




我想当然的象在其他机器上一样输入了:
$ /usr/local/ssl/misc/CA.pl -newca
结果发现一大堆错误(见下图), 经过查看, 才发现原来这台机器上ssl安装的路径和平时其他的不一样, 而且CA.pl被改成CA了, 没关系, 那我们就具体问题具体分析:
$ /usr/share/ssl/misc/CA -newca




成功了, 按回车开始制作你的SSL CA:

输入你的CA的密码, 然后再输入一次确认




然后一步一步输入你的信息, 就没有问题了.



到此你就建立起你的SSL CA认证服务了. 在你的目录下, 会出现一个demoCA的目录, 这就是你的配置目录了.



进到里面看一下, 公众钥匙是在cacert.pem里, 而密匙则在private/cakey.pem里



到此为止就成功了. 如何发布和运用就稍后才讲了. 如果你有兴趣自己先了解的话, 可以到以下网址:

http://www.openssl.org
http://www.cert.org/advisories/CA-2001-04.html
发表于 2004-3-17 08:13:50 | 显示全部楼层
写的好
回复

使用道具 举报

发表于 2004-3-17 22:24:10 | 显示全部楼层
[code:1]2004年03月17日下午22时21分04秒[root@home certs]# pwd
/usr/share/ssl/certs
2004年03月17日下午22时21分06秒[root@home certs]# ll
总用量 272
-rw-r--r--    1 root     root       253688 10月  5 00:04 ca-bundle.crt
-rw-------    1 root     root         2352 11月  8 23:54 imapd.pem
-rw-------    1 root     root         2352 11月  8 23:54 ipop3d.pem
-rw-r--r--    1 root     root          610 10月  5 00:03 make-dummy-cert
-rw-r--r--    1 root     root         1832 10月  5 00:03 Makefile
-rw-r-----    1 root     ldap         2352 11月  8 23:58 slapd.pem
2004年03月17日下午22时21分11秒[root@home certs]# rpm -qf imapd.pem
imap-2002d-2
2004年03月17日下午22时21分14秒[root@home certs]# rpm -qf Makefile
openssl-0.9.7a-22.1
2004年03月17日下午22时21分19秒[root@home certs]# ll /etc/httpd/conf/Makefile
lrwxr-xr-x    1 root     root           37 11月  8 23:54 /etc/httpd/conf/Makefile -> ../../../usr/share/ssl/certs/Makefile
2004年03月17日下午22时21分22秒[root@home certs]#
[/code:1]

可以用到 ssl 的软件在安装时,都会给您生成一个。

Courier-IMAP 也是如此呢。
回复

使用道具 举报

发表于 2004-3-17 22:29:26 | 显示全部楼层
/usr/share/ssl/certs/Makefile 文件内容:


[code:1].PHONY: usage
.SUFFIXES: .key .csr .crt .pem
.PRECIOUS: %.key %.csr %.crt %.pem

usage:
        @echo "This makefile allows you to create:"
        @echo "  o public/private key pairs"
        @echo "  o SSL certificate signing requests (CSRs)"
        @echo "  o self-signed SSL test certificates"
        @echo
        @echo "To create a key pair, run \"make SOMETHING.key\"."
        @echo "To create a CSR, run \"make SOMETHING.csr\"."
        @echo "To create a test certificate, run \"make SOMETHING.crt\"."
        @echo "To create a key and a test certificate in one file, run \"make SOMETHING.pem\"."
        @echo
        @echo "To create a key for use with Apache, run \"make genkey\"."
        @echo "To create a CSR for use with Apache, run \"make certreq\"."
        @echo "To create a test certificate for use with Apache, run \"make testcert\"."
        @echo
        @echo Examples:
        @echo "  make server.key"
        @echo "  make server.csr"
        @echo "  make server.crt"
        @echo "  make stunnel.pem"
        @echo "  make genkey"
        @echo "  make certreq"
        @echo "  make testcert"

%.pem:
        umask 77 ; \
        PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
        PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
        /usr/bin/openssl req -newkey rsa:1024 -keyout $$PEM1 -nodes -x509 -days 365 -out $$PEM2 ; \
        cat $$PEM1 >  $@ ; \
        echo ""    >> $@ ; \
        cat $$PEM2 >> $@ ; \
        $(RM) $$PEM1 $$PEM2

%.key:
        umask 77 ; \
        /usr/bin/openssl genrsa -des3 1024 > $@

%.csr: %.key
        umask 77 ; \
        /usr/bin/openssl req -new -key $^ -out $@

%.crt: %.key
        umask 77 ; \
        /usr/bin/openssl req -new -key $^ -x509 -days 365 -out $@

KEY=/etc/httpd/conf/ssl.key/server.key
CSR=/etc/httpd/conf/ssl.csr/server.csr
CRT=/etc/httpd/conf/ssl.crt/server.crt

genkey: $(KEY)
certreq: $(CSR)
testcert: $(CRT)

$(CSR): $(KEY)
        umask 77 ; \
        /usr/bin/openssl req -new -key $(KEY) -out $(CSR)

$(CRT): $(KEY)
        umask 77 ; \
        /usr/bin/openssl req -new -key $(KEY) -x509 -days 365 -out $(CRT)[/code:1]

它读取 /usr/share/ssl/openssl.cnf 文件内容来生成。
回复

使用道具 举报

发表于 2004-3-17 22:32:00 | 显示全部楼层
看看 imap 如何生成:

[code:1]2004年03月17日下午22时30分11秒[root@home root]# rpm -qi imap --scripts
Name        : imap                         Relocations: (not relocateable)
Version     : 2002d                             Vendor: Red Hat, Inc.
Release     : 2                             Build Date: 2003年07月12日 星期六 04时21分12秒
Install Date: 2003年11月08日 星期六 23时54分44秒      Build Host: bugs.devel.redhat.com
Group       : 系统环境/守护进程             Source RPM: imap-2002d-2.src.rpm
Size        : 2623111                          License: University of Washington Free-Fork License
Signature   : DSA/SHA1, 2003年09月25日 星期四 01时57分52秒, Key ID 219180cddb42a60e
Packager    : John Dennis <[email protected]>
URL         : http://www.washington.edu/imap/
Summary     : 用于 IMAP 和 POP 网络邮件协议的服务器守护进程。
Description :
imap 软件包为 IMAP (互联网 Message Access Protocol) 和
POP (Post Office Protocol) 邮件访问协议提供了服务器守
护进程。POP 协议使用一个“邮局”机器来为用户收集
邮件,并且允许用户把邮件下载到它们的本地机器来阅
读。IMAP 协议允许用户在一个远程机器上阅读邮件而无
需把它们下载到本地机器上。

如果您需要一个支持 IMAP 或 POP 邮件访问协议的服务
器,请安装 imap 软件包。
postinstall scriptlet (using /bin/sh):
# This was 'if with_ssl' before, but due to packaging problems with older
# releases handling the logic, I changed it to only happen in 7.x instead
# If no cert, migrate stunnel.pem, or generate a new cert
pushd /usr/share/ssl/certs &> /dev/null || :
for CERT in imapd.pem ipop3d.pem ;do
   if [ ! -e $CERT ];then
      if [ -e stunnel.pem ];then
         cp stunnel.pem $CERT &> /dev/null || :
      elif [ -e Makefile ];then
         make $CERT << EOF &> /dev/null || :
--
SomeState
SomeCity
SomeOrganization
SomeOrganizationalUnit
localhost.localdomain
[email protected]
EOF
      fi
   fi
done
popd &> /dev/null || :
/sbin/service xinetd reload > /dev/null 2>&1 || :
postuninstall scriptlet (using /bin/sh):
/sbin/service xinetd reload > /dev/null 2>&1 || :
2004年03月17日下午22时30分12秒[root@home root]#[/code:1]
回复

使用道具 举报

发表于 2004-3-17 22:37:56 | 显示全部楼层
Apache 的 ssl 需要 mod_ssl 模块

[code:1]2004年03月17日下午22时33分50秒[root@home root]# rpm -qli mod_ssl --scripts
Name        : mod_ssl                      Relocations: (not relocateable)
Version     : 2.0.46                            Vendor: Red Hat, Inc.
Release     : 25.ent                        Build Date: 2003年09月25日 星期四 21时32分06秒
Install Date: 2003年11月08日 星期六 23时54分18秒      Build Host: stripples.devel.redhat.com
Group       : 系统环境/守护进程             Source RPM: httpd-2.0.46-25.ent.src.rpm
Size        : 207850                           License: Apache Software License
Signature   : DSA/SHA1, 2003年09月25日 星期四 23时04分08秒, Key ID 219180cddb42a60e
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
URL         : http://httpd.apache.org/
Summary     : Apache 万维网 服务器的 Cryptography 支持。
Description :
mod_ssl 模块通过 安全套接字层 (SSL) 和传输层安全
(TLS) 协议为 Apache 万维网 服务器提供了强有力的加
密术。
postinstall scriptlet (using /bin/sh):
/sbin/ldconfig ### is this needed?
umask 077

if [ ! -f /etc/httpd/conf/ssl.key/server.key ] ; then
/usr/bin/openssl genrsa -rand /proc/apm:/proc/cpuinfo:/proc/dma:/proc/filesystems:/proc/interrupts:/proc/ioports:/proc/pci:/proc/rtc:/proc/uptime 1024 > /etc/httpd/conf/ssl.key/server.key 2> /dev/null
fi

FQDN=`hostname`
if [ "x${FQDN}" = "x" ]; then
   FQDN=localhost.localdomain
fi

if [ ! -f /etc/httpd/conf/ssl.crt/server.crt ] ; then
cat << EOF | /usr/bin/openssl req -new -key /etc/httpd/conf/ssl.key/server.key -x509 -days 365 -out /etc/httpd/conf/ssl.crt/server.crt 2>/dev/null
--
SomeState
SomeCity
SomeOrganization
SomeOrganizationalUnit
${FQDN}
root@${FQDN}
EOF
fi
/etc/cron.daily/certwatch
/etc/httpd/conf.d/ssl.conf
/etc/httpd/conf/Makefile
/etc/httpd/conf/ssl.crl
/etc/httpd/conf/ssl.crl/Makefile.crl
/etc/httpd/conf/ssl.crt
/etc/httpd/conf/ssl.crt/Makefile.crt
/etc/httpd/conf/ssl.csr
/etc/httpd/conf/ssl.key
/etc/httpd/conf/ssl.prm
/usr/lib/httpd/modules/mod_ssl.so
/usr/sbin/certwatch
/usr/share/man/man8/certwatch.8.gz
/var/cache/mod_ssl
2004年03月17日下午22时34分08秒[root@home root]#[/code:1]


/usr/bin/openssl genrsa -rand /proc/apm:/proc/cpuinfo:/proc/dma:/proc/filesystems:/proc/interrupts:/proc/ioports:/proc/pci:/proc/rtc:/proc/uptime 1024 > /etc/httpd/conf/ssl.key/server.key 2> /dev/null

确保您的 server.key 跟其他机器的不同。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-9 10:08 , Processed in 0.104296 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表