如何在Linux中为需要CA根密钥的多个域创buildSSL证书

我有邮件服务器。 有可能托pipe的域名。 我正在部署SSL证书。 我希望当用户访问那里使用HTTPS浏览器的邮件帐户应该显示证书是可信的(在Chrome中,它应该在地址栏中显示绿色的HTTPS不是红色)。

我发现的是:
我必须先创buildCA证书。

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -days 1024 -out rootCA.pem

将其复制到用户的工作站上。

然后使用以下命令创build密钥文件。

openssl genrsa -out device.key 2048

和使用该密钥文件的csr文件使用命令:

openssl req -new -key device.key -out device.csr

一旦完成,请签署需要CA根密钥的CSR。

openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 500

使用上述方法,我只能为单个域创build证书。
如何为多个域创build它。

NameBased SSL VirtualHosts

如果您在一个IP地址上使用多个基于名称的虚拟主机和SSL,则会出现此问题。 在SSL握手完成之前,Web服务器不知道所请求主机的名称,因为HTTP请求标头是encryption内容的一部分。

实际上,像Apache这样的Web服务器将允许您configuration基于名称的SSL虚拟主机,但它将始终使用来自首先列出的虚拟主机(在所选IP地址和端口上)的configuration来设置encryption层。 有关更多信息,请参阅https://wiki.apache.org/httpd/NameBasedSSLVHosts

如果多个虚拟主机位于同一个域中,则可以使用一个证书作为通配符证书,如*.example.com ,该证书适用于one.example.comtwo.example.com

基于名称的SSL虚拟主机与SNI

该解决scheme是称为服务器名称指示(SNI)的SSL协议的扩展,它允许客户端将请求的主机名包含在SSL握手的第一条消息中。 有关更多信息,请参阅https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

Apache需要使用OpenSSL(使用TLS扩展选项enable-tlsext启用; OpenSSL 0.9.8k及更高版本在默认情况下启用此function)

要检查您的Apache安装是否支持SNI,请执行以下步骤:

/etc/apache2/ports.conf为SSL启用NameVirtualHost:

 <IfModule mod_ssl.c> NameVirtualHost *:443 Listen 443 </IfModule> 

/etc/apache2/sites-available/default-ssl创build两个SSL VirtualHost

 <VirtualHost *:443> ServerName www.example1.com DocumentRoot /var/www/example1 SSLEngine on SSLCertificateFile /etc/apache2/example1.com.cert SSLCertificateKeyFile /etc/apache2/example1.com.key </VirtualHost> <VirtualHost *:443> ServerName www.example2.com DocumentRoot /var/www/example2 SSLEngine on SSLCertificateFile /etc/apache2/example2.com.cert SSLCertificateKeyFile /etc/apache2/example2.com.key </VirtualHost> 

启用mod_ssl:

 # a2enmod ssl 

启用S​​SL站点:

 # a2ensite default-ssl 

重新启动Apache:

 # /etc/init.d/apache2 restart 

现在,如果你尾巴的Apache错误日志,你看到以下消息,这意味着SNI是内置的。

 [warn] Init: Name-based SSL virtual hosts only work for clients with \ TLS server name indication support (RFC 4366) 

否则,你会看到一个Apache启动消息, You should not use name-based virtual hosts in conjunction with SSL!!

现在,如果您使用您的CA证书签署了两个证书example1.com.certexample2.com.cert ,将其添加到您的浏览器的信任列表中,并且您的浏览器支持SNI,则应该能够访问https://www.example1.comhttps://www.example2.com没有任何来自您的浏览器的投诉。

基于Namen的SSL虚拟主机与GnuTLS

GnuTLS是SSL传输层安全性的LGPL许可实现。 使用GnuTLS,您可以创build一个适用于多个域和通配符域的单个证书,如下所示:

 DNS Name: example1.com DNS Name: *.example1.com DNS Name: example2.com DNS Name: *.example2.com DNS Name: example3.com DNS Name: *.example3.com 

有关使用GnuTLS的详细指南,请参阅https://help.ubuntu.com/community/GnuTLS