OpenSSL 在 Apache 和 Dovecot 下的使用(一)
创建你的证书
Debian/Ubuntu/Mint 会在 /etc/ssl 中存储私钥和证书的符号链接。系统自带的证书保存在/usr/share/ca-certificates 中。你安装或创建的证书在 /usr/local/share/ca-certificates/中。
这个例子是对 Debian 而言。创建私钥和公用证书,将证书转换为正确的格式,并将其符号链接到正确的目录:
$ sudo openssl req -x509 -days 365 -nodes -newkey rsa:2048 \-keyout /etc/ssl/private/test-com.key -out \/usr/local/share/ca-certificates/test-com.crtGenerating a 2048 bit RSA private key.......+++......................................+++writing new private key to '/etc/ssl/private/test-com.key'-----You are about to be asked to enter information that willbe incorporated into your certificate request.What you are about to enter is what is called a DistinguishedName or a DN. There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [AU]:USState or Province Name (full name) [Some-State]:WALocality Name (eg, city) []:SeattleOrganization Name (eg, company) [Internet Widgits Pty Ltd]:Alrac Writing SweatshopOrganizational Unit Name (eg, section) []:home dungeonCommon Name (e.g. server FQDN or YOUR name) []:www.test.comEmail Address []:admin@test.com$ sudo update-ca-certificatesUpdating certificates in /etc/ssl/certs...1 added, 0 removed; done.Running hooks in /etc/ca-certificates/update.d...Adding debian:test-com.pemdone.done.
CentOS/Fedora 使用不同的文件结构,并不使用 update-ca-certificates,使用这个命令:
$ sudo openssl req -x509 -days 365 -nodes -newkey rsa:2048 \-keyout /etc/httpd/ssl/test-com.key -out \/etc/httpd/ssl/test-com.crt
最重要的条目是 Common Name,它必须与你的完全限定域名(FQDN)完全匹配。此外其它信息都是任意的。-nodes 用于创建一个无密码的证书,这是 Apache 所必需的。-days 用于定义过期日期。更新证书是一个麻烦的事情,但这样应该能够额外提供一些安全保障。参见 90 天证书有效期的利弊中的讨论。
配置 Apache
现在配置 Apache 以使用你的新证书。如果你遵循给初学者看的在 Ubuntu Linux 上使用 Apache:第 2 部分,你所要做的就是修改虚拟主机配置中的 SSLCertificateFile 和 SSLCertificateKeyFile,以指向你的新私钥和公共证书。来自该教程中的 test.com 示例现在看起来像这样:
SSLCertificateFile /etc/ssl/certs/test-com.pemSSLCertificateKeyFile /etc/ssl/private/test-com.key
CentOS 用户,请参阅在 CentOS wiki 中的在 CentOS 上设置 SSL 加密的 Web 服务器一文。过程是类似的,wiki 会告诉如何处理 SELinux。
测试 Apache SSL
一个简单的方法是用你的网络浏览器访问 https://yoursite.com,看看它是否可以正常工作。在第一次这样做时,你会在你过度保护的 web 浏览器中看到可怕的警告说网站是不安全的,因为它使用的是自签名证书。请忽略你这个敏感的浏览器,并单击屏幕创建永久性例外。 如果你遵循在给初学者看的在 Ubuntu Linux 上使用 Apache:第 2 部分上的示例虚拟主机配置,那么即使你的网站访问者尝试使用纯 HTTP,你的网站的所有流量都将强制通过 HTTPS。
一个很好测试方法是使用 OpenSSL。是的,有一个漂亮的命令来测试这些东西。试下这个:
$ openssl s_client -connect www.test.com:443CONNECTED(00000003)depth=0 C = US, ST = WA, L = Seattle, O = Alrac Writing Sweatshop,OU = home dungeon, CN = www.test.com, emailAddress = admin@test.comverify return:1---Certificate chain0 s:/C=US/ST=WA/L=Seattle/O=Alrac Writing Sweatshop/OU=homedungeon/CN=www.test.com/emailAddress=admin@test.comi:/C=US/ST=WA/L=Seattle/O=Alrac Writing Sweatshop/OU=homedungeon/CN=www.test.com/emailAddress=admin@test.com---Server certificate-----BEGIN CERTIFICATE-----[...]
这里输出了大量的信息。这里有很多关于 openssl s_client 的有趣信息; 现在足够我们知道我们的 web 服务器是否使用了正确的 SSL 证书。
创建一个证书签名请求
如果你决定使用第三方证书颁发机构(CA),那么就必须创建证书签名请求(CSR)。你将它发送给你的新 CA,他们将签署并将其发送给您。他们可能对创建你的 CSR 有自己的要求; 这是如何创建一个新的私钥和 CSR 的典型示例:
$ openssl req -newkey rsa:2048 -nodes \-keyout yourdomain.key -out yourdomain.csr
你也可以从一个已经存在的 key 中创建一个 CSR:
$ openssl req -key yourdomain.key \-new -out domain.csr
原文发布时间为:2017-02-02
本文来自云栖社区合作伙伴“Linux中国”
最后更新:2017-05-27 09:31:29
上一篇:
使用 Ganglia 对 Linux 网格和集群服务器进行实时监控
下一篇:
LXD 2.0 系列(六):远程主机及容器迁移
C# Math.Round()函数问题
银行离开IBM必死?国货10年内无法接盘
快上车!老司机带你走进“大数据及阿里云数据分析平台”
Write Combining
android WebView使用cmwap无法联网解决办法
oracle中报ora-01033:oracle initializationg or shutdown in progress错
TensorFlow实现神经网络入门篇
《Fiddler调试权威指南》——1.2 快速入门
学界业界专家云集 数据挖掘专场盛会将在阿里举办
Page_Load上面的代码使用——ViewState,Session,Static,Linq