开发者社区> 知与谁同> 正文

OpenSSL 在 Apache 和 Dovecot 下的使用(一)

简介:
+关注继续查看

创建你的证书

Debian/Ubuntu/Mint 会在 /etc/ssl 中存储私钥和证书的符号链接。系统自带的证书保存在/usr/share/ca-certificates 中。你安装或创建的证书在 /usr/local/share/ca-certificates/中。

这个例子是对 Debian 而言。创建私钥和公用证书,将证书转换为正确的格式,并将其符号链接到正确的目录:


  1. $ sudo openssl req -x509 -days 365 -nodes -newkey rsa:2048 \
  2. -keyout /etc/ssl/private/test-com.key -out \
  3. /usr/local/share/ca-certificates/test-com.crt
  4. Generating a 2048 bit RSA private key
  5. .......+++
  6. ......................................+++
  7. writing new private key to '/etc/ssl/private/test-com.key'
  8. -----
  9. You are about to be asked to enter information that will
  10. be incorporated into your certificate request.
  11. What you are about to enter is what is called a Distinguished
  12. Name or a DN. There are quite a few fields but you can leave some blank
  13. For some fields there will be a default value,
  14. If you enter '.', the field will be left blank.
  15. -----
  16. Country Name (2 letter code) [AU]:US
  17. State or Province Name (full name) [Some-State]:WA
  18. Locality Name (eg, city) []:Seattle
  19. Organization Name (eg, company) [Internet Widgits Pty Ltd]:Alrac Writing Sweatshop
  20. Organizational Unit Name (eg, section) []:home dungeon
  21. Common Name (e.g. server FQDN or YOUR name) []:www.test.com
  22. Email Address []:admin@test.com
  23. $ sudo update-ca-certificates
  24. Updating certificates in /etc/ssl/certs...
  25. 1 added, 0 removed; done.
  26. Running hooks in /etc/ca-certificates/update.d...
  27. Adding debian:test-com.pem
  28. done.
  29. done.

CentOS/Fedora 使用不同的文件结构,并不使用 update-ca-certificates,使用这个命令:


  1. $ sudo openssl req -x509 -days 365 -nodes -newkey rsa:2048 \
  2. -keyout /etc/httpd/ssl/test-com.key -out \
  3. /etc/httpd/ssl/test-com.crt

最重要的条目是 Common Name,它必须与你的完全限定域名(FQDN)完全匹配。此外其它信息都是任意的。-nodes 用于创建一个无密码的证书,这是 Apache 所必需的。-days 用于定义过期日期。更新证书是一个麻烦的事情,但这样应该能够额外提供一些安全保障。参见 90 天证书有效期的利弊中的讨论。

配置 Apache

现在配置 Apache 以使用你的新证书。如果你遵循给初学者看的在 Ubuntu Linux 上使用 Apache:第 2 部分,你所要做的就是修改虚拟主机配置中的 SSLCertificateFile 和 SSLCertificateKeyFile,以指向你的新私钥和公共证书。来自该教程中的 test.com 示例现在看起来像这样:


  1. SSLCertificateFile /etc/ssl/certs/test-com.pem
  2. SSLCertificateKeyFile /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。是的,有一个漂亮的命令来测试这些东西。试下这个:


  1. $ openssl s_client -connect www.test.com:443
  2. CONNECTED(00000003)
  3. depth=0 C = US, ST = WA, L = Seattle, O = Alrac Writing Sweatshop,
  4. OU = home dungeon, CN = www.test.com, emailAddress = admin@test.com
  5. verify return:1
  6. ---
  7. Certificate chain
  8. 0 s:/C=US/ST=WA/L=Seattle/O=Alrac Writing Sweatshop/OU=home
  9. dungeon/CN=www.test.com/emailAddress=admin@test.com
  10. i:/C=US/ST=WA/L=Seattle/O=Alrac Writing Sweatshop/OU=home
  11. dungeon/CN=www.test.com/emailAddress=admin@test.com
  12. ---
  13. Server certificate
  14. -----BEGIN CERTIFICATE-----
  15. [...]

这里输出了大量的信息。这里有很多关于 openssl s_client 的有趣信息; 现在足够我们知道我们的 web 服务器是否使用了正确的 SSL 证书。

创建一个证书签名请求

如果你决定使用第三方证书颁发机构(CA),那么就必须创建证书签名请求(CSR)。你将它发送给你的新 CA,他们将签署并将其发送给您。他们可能对创建你的 CSR 有自己的要求; 这是如何创建一个新的私钥和 CSR 的典型示例:


  1. $ openssl req -newkey rsa:2048 -nodes \
  2. -keyout yourdomain.key -out yourdomain.csr

你也可以从一个已经存在的 key 中创建一个 CSR:


  1. $ openssl req -key yourdomain.key \
  2. -new -out domain.csr

原文发布时间为:2017-02-02

本文来自云栖社区合作伙伴“Linux中国”

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SpringBoot使用dockerfile生成镜像
SpringBoot使用dockerfile生成镜像
38 0
DotNetBar.Bar图标列表的使用
DotNetBar.Bar图标列表的使用                                             老帅      控件DevComponents.DotNetBar.Bar如何使用图像列表呢?比如给工具条或者菜单加上图标。
818 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
20111 0
使用DotNetNuke(DNN) Startkit 4.7(及以上版本)安装无法完成问题的解决方法
最近决定使用DNN Startkit 做些开发,却发现下载DNN 4.8.2 Startkit安装后,生成的网站总是无法完成安装,一到数据库安装那里就停下来,只有进度条滚动,不执行安装的Script。 如图: 几经周折,最终发现自己犯了了一个很愚蠢的错误-没有仔细阅读说明。
697 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18396 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24952 0
DotNetBar.Bar菜单的使用
DotNetBar.Bar菜单的使用                                         老帅     在C#中使用控件DevComponents.
1089 0
+关注
10077
文章
2994
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载