| |||
|
|
|
5、如何产生2048位的密钥对?
在上面的命令行交互中,我们看到“Generating a 1024 bit RSA private key”,即系统缺省采用1024位的RSA密钥长度,一般来说1024位是足够的,但是在申请EV证书的时候,我们必须采用2048位的密钥长度,要生成2048位的密钥,可以修改上面的命令行:(斜体部分为增加的参数)
openssl req -new -nodes -newkey rsa:2048 -keyout server.key -out server.csr
6、如何制作中文的CSR文件?
中文CSR文件,主要指企业名称、部门,城市,省份等信息采用中文,通用名和国家代码仍然必须是英文的,GeoTrust目前已经全面支持中文的CSR,要制作中文的CSR,最简单的办法仍然是采用我们的在线CSR生成器: https://www.myssl.cn/openssl/createcsr.asp
如果希望自己通过Openssl工具来制作中文CSR就需要多费一些工夫了,下面详细介绍一下采用Openssl命令行制作中文CSR的方法。
Openssl本身是可以支持UTF-8编码来支持中文的,但是如果通过DOS命令行是无法输入UTF-8的中文字符的,所以我们必须采用Opnessl.cnf配置文件的缺省值来实现中文字的输入。采用一个文本编辑器,最好是支持utf-8字符的,我采用UltraEdit,打开Openssl.cnf文件,首先修改:
string_mask = utf8only
这句话将强制字符的输入采用UTF-8的编码格式,然后修改缺省DN信息,录入我们需要合中文字符,如下
commonName_default = www.myssl.cn organizationName_default = 上海迅通科技有限公司 organizationalUnitName_default = IT 部门 stateOrProvinceName_default = 上海 localityName_default = 上海 countryName_default = CN
然后将文件按utf-8,no bom的编码格式保存,在Ultraedit下,请选择“另存为”,格式为“UTF-8 - NO-BOM”。如果没有可以支持UTF-8的编辑工具,也可以下载一个ICONV来做编码转换工作。
准备好openss.cnf文件后,输入命令行:
openssl req -utf8 -config config.cnf -new -nodes -batch -keyout server.key -out server.csr
系统将自动生成CSR文件,保存在server.csr中。
CSR已经做好,最后强调,必须同时保存好server.csr和server.key2个文件,尤其是server.key一定丢失,将无法再使用这个证书。
1、将证书内容存为一个文件:
您会收到一封来自迅通诚信的邮件,证书内容附在邮件中。如果证书是以附件的形式(Cert.cer)夹带在邮件中,您就可以直接应用它。如果您的证书中以文本的方式存在邮件中,您就需要将邮件中的证书部分的内容用Vi或Notepad存成一个纯文本文件。不要将其存成Microsoft Word 或其它字处理软件格式,并确定证书内容中不含有空行和空格,文件名可以为server.cer。如下所示:
2、修改httpd.conf文件。
Apache一般有2个版本下载,一个是带SSL模块的,一个是不带SSL的,请首先检查自己的SSL是包含了SSL模块的,否则就没法做了。Apache的参数配置都在httpd.conf文件中,SSL配置也是如此,此外还可以通过include httpd-ssl.conf来包含一个专门配置SSL的配置文件,如果激活了httpd-include ssl.conf,则可以打开httpd-ssl.conf来配置相应参数。
一般,我们直接在httpd.conf文件中直接配置SSL参数:
#加载模块mod_ssl.so,此模块是启用SSL功能必须的。 LoadModule ssl_module modules/mod_ssl.so #监听443端口 Listen 443 #建立一个SSL的虚拟站点,避免SSL配置影响原来HTTP的站点配置。 <VirtualHost _default_:443> DocumentRoot "C:/Program Files/Apache2/htdocs" ServerName www.myssl.cn:443 SSLEngine on SSLCertificateFile "C:/SSL/server.cer" SSLCertificateKeyFile "C:/SSL/server.key" SSLCertificateChainFile "C:/SSL/chain.cer" ErrorLog "C:/Program Files/Apache2/logs/error.log" TransferLog "C:/Program Files/Apache2/logs/access.log" </VirtualHost> #说明主站是使用HTTP通信的,只有上面虚拟站点有SSL SSLEngine off
配置参数说明如下(完整的SSL配置参数见这里):
3、重新启动Apache,如果是在Linux下,输入:
apachectl stop
apachectl startssl
1、基本客户证书认证
强制客户对整个站点都必须采用客户证书认证的方式,可以在原来的配置下增加如下参数:
<VirtualHost _default_:443> ...... ...... ...... # 需要客户有一个客户端证书,并由ca.cer这个CA证书签署 SSLVerifyClient require SSLVerifyDepth 1 SSLCACertificateFile conf/ssl.crt/ca.cer </VirtualHost>
2、如果只要求对特定目录采用客户证书认证方式,其他目录都不需要客户端证书,则可以采用如下配置:
<VirtualHost _default_:443> ...... ...... ...... # 需要客户有一个客户端证书,并由ca.cer这个CA证书签署 SSLVerifyClient none SSLCACertificateFile conf/ssl.crt/ca.crt <Location /secure/area> SSLVerifyClient require SSLVerifyDepth 1 </Location> </VirtualHost>
强制HTTPS访问,主要通过将用户访问的HTTP请求自动转换为HTTPS请求,有两种方式:一种是通过编程的方式,详见:"强制用户通过SSL访问网站" ;另一种方式则是通过Apache强大的Rewrite功能。
如果要针对整个网站全部执行HTTP自动转为HTTPS的功能,可以在httpd.conf文件中,增加:
RewriteEngine on RewriteCond %{HTTPS} !=on RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]
如果,仅要求对\secure目录下的内容强制采用HTTPS访问,可以在httpd.conf文件中加入如下语句:
<Directory "C:\Program Files\htdocs\secure"> RewriteEngine on RewriteCond %{HTTPS} !=on RewriteRule ^(.*) https://%{SERVER_NAME}/secure/$1 [L,R] </Directory>
如何对来自Internet并要访问Intranet的客户强制采用强加密的HTTPS通信,并采用基本或者客户证书的认证方式?同时还要确保来自Intranet的客户可以进行HTTP访问?
假设IntranetIP地址段是192.160.1.0/24,Intranet站点子区域的URL是/subarea ,则可以在HTTPS虚拟主机站点以外增加如下配置(这样可以同时作用于HTTPS和HTTP):
SSLCACertificateFile conf/ssl.crt/company-ca.crt <Directory /usr/local/apache2/htdocs> # subarea以外的区域只允许来自Intranet的访问 Order deny,allow Deny from all Allow from 192.168.1.0/24 </Directory> <Directory /usr/local/apache2/htdocs/subarea> # 在subarea以内,允许所有来自Intranet的访问, # 但对来自Internet的访问,仅允许HTTPS+Strong-Cipher+Password # 或者HTTPS+Strong-Cipher+Client-Certificate # 如果使用了HTTPS,则确保使用高强度加密 # 同时允许客户以基本认证的形式认证 SSLVerifyClient optional SSLVerifyDepth 1 SSLOptions +FakeBasicAuth +StrictRequire SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128 # 强制来自Internet的客户使用HTTPS RewriteEngine on RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$ RewriteCond %{HTTPS} !=on RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R] # 允许网络访问和基本认证 Satisfy any # 控制网络访问 Order deny,allow Deny from all Allow 192.168.1.0/24 # HTTP基本认证 AuthType basic AuthName "Protected Intranet Area" AuthBasicProvider file AuthUserFile conf/protected.passwd Require valid-user </Directory>
在Apache下的证书备份是非常简单的,打开httpd.conf文件,找到SSLCertificateFile和SSLCertificateKeyFile指定的2个文件,通常是.cer(.crt)和.key文件,将这两个文件复制到备份媒质上即可。
要恢复Apache的证书同样非常简单,将备份的.cer和.key文件,复制到新的服务器上,然后参考上面服务器证书安装说明,修改httpd.conf文件即可。
如果要在一个IP地址上部署多个SSL网站,一种办法就是给每个网站分配不同的端口号,但这给用户使用带来很多麻烦。如果要在同一个IP地址的443端口上部署多个SSL网站,必须保证这些网站的域名都能匹配相同的一张SSL证书。这是因为SSL握手过程是通过IP+Port来进行通信,一个IP的443端口只能返给客户一张SSL证书(即使配置了多张证书,也只能返回第一张,因为用户请求信息中,只有看到IP地址,无法区分用户需要哪个证书),如果这张证书能够满足这些网站的主机名匹配要求,就可以使用。
一般能匹配多个主机名的证书有通配符证书*.domain.com和多域名证书(www.domain.com,ftp.domain.com等),以下我们提供一个典型同一个IP上的多主机名部署配置,www.domain.com对应的根目录在WWW下,ftp.domain.com对应的根目录在FTP下
NameVirtualHost 11.22.33.44:443 <VirtualHost 11.22.33.44:443> DocumentRoot "C:/Apache2.2/htdocs/www" ServerName www.domain.com SSLEngine on SSLCertificateFile "C:/Apache2.2/conf/server.cer" SSLCertificateKeyFile "C:/Apache2.2/conf/server.key" SSLCertificateChainFile "C:/Apache2.2/conf/chain.cer" </VirtualHost> <VirtualHost 11.22.33.44:443> DocumentRoot "C:/Apache2.2/htdocs/ftp" ServerName ftp.domain.com SSLEngine on SSLCertificateFile "C:/Apache2.2/conf/server.cer" SSLCertificateKeyFile "C:/Apache2.2/conf/server.key" </VirtualHost>
1、Openssl是开源的,可以到http://www.openssl.org/source/下载最新的版本。然后解压到c:\openssl。
2、要编译Openssl,需要下载并安装ActivePerl,并在系统路径中添加“C:\Perl\site\bin;C:\Perl\bin”
3、安装Vs2003(也可以安装VS2005,2008但这2个版本的VC编译出来的Openssl是有BUG的,在特定情况下会产生win32异常错误,仅适合偶尔用一下的情况)。
4、使用VS2003下的Visual Studio.net 2003 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)
5、进入c:\openssl。
6、输入(注意大小写): perl Configure VC-WIN32
7、输入: ms\do_ms
8、输入: nmake -f ms\ntdll.mak
9、Openssl已经编译好了,执行程序在out32dll目录下。
法律声明 | 关于我们 | 联系我们 | 招聘信息 © 2002 - 2017 上海迅通科技有限公司(myssl.cn) 版权所有 沪ICP备06031562号 |