`
ralin
  • 浏览: 42740 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

基于SSL的电子证书配置

阅读更多
基于SSL的电子证书配置
1) 创建root CA
如果你有自己的CA(Certificate Authority),或者打算购买商业CA证书,那么这个步骤可以省略了,后面的步骤也会不同,但是不管如何,我们假定现在我们得到的CA私钥名字是 rootca.key。
现在我们自己来创建自己的root CA
第一步,创建root CA的私钥,为了安全,我们采取2048bit加密方式,设置的密码也应该足够复杂

# openssl genrsa -des3 2048 >rootca.key
Generating RSA private key, 2048 bit long modulus           
......................................+++                   
......+++                                                  
e is 65537 (0x10001)                                        
Enter pass phrase:    <------输入自己的密码,最好足够复杂  
                                  
Verifying - Enter pass phrase:           <----- 再次输入密码 


这样就创建root CA的密钥。
解析来我们用这个私钥对CA的证书做自认证(self-certificte)签名

        
# openssl req -new -x509 -key caroot.key -days 3650 -out caroot.cert
Enter pass phrase for caroot.key: <----输入私钥的密码
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [HuNan]:
Locality Name (eg, city) [ChangSha]:
Organization Name (eg, company) [RedFlag Software]:
Organizational Unit Name (eg, section) [Technical Support Depart]:
Common Name (eg, your name or your server's hostname) [wgzhao-demo.rflinux.com]:
Email Address []:




现在我们创建存放CA证书的路径和一些必要文件



mkdir -p /etc/pki/CA/{certs,newcerts,private}
touch /etc/pki/CA/index.txt
echo "01" >/etc/pki/CA/serial


将生成的证书拷贝到对应的位置


cp rootca.key /etc/pki/CA/private/cakey.pem
cp rootca.cert /etc/pki/CA/rootca.cert



第二步:创建服务端证书
首先创建服务端私钥


# openssl genrsa -des3 2048 >server.key
Generating RSA private key, 2048 bit long modulus
..............................................................+++
......................+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:



由密钥产生认证的申请文件


#openssl req -days 3650 -key server.key -new -out server.csr
Enter pass phrase for server.key:     <---- 输入服务端私钥的密码                                            
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [HuNan]:
Locality Name (eg, city) [ChangSha]:
Organization Name (eg, company) [RedFlag Software]:
Organizational Unit Name (eg, section) [Technical Support Depart]:
Common Name (eg, your name or your server's hostname) [wgzhao-demo.rflinux.com]:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:


上面需要提供的信息中,最关键的是Common Name字段,这里要填写的是用过是FQDN(Full Quality Domain Name),也应该和你将来访问的域名一致,否则访问域名的时候,SSL会报错。
接着使用root CA给申请文件签名产生证书文件


# openssl  ca -out server.cert -days 3650 -infiles server.csr
Using configuration from /etc/pki/tls/openssl.cnf                            
Enter pass phrase for ../../CA/private/cakey.pem:   <---输入root CA的私钥密码                          
Check that the request matches the signature                                
Signature ok                                                                 
Certificate Details:                                                        
        Serial Number:                                                       
            ab:0d:d5:fe:d0:d3:eb:22                                         
        Validity                                                             
            Not Before: Jun 23 04:26:40 2008 GMT                             
            Not After : Jun 21 04:26:40 2018 GMT                             
        Subject:                                                             
            countryName               = CN                                   
            stateOrProvinceName       = HuNan                                
            organizationName          = RedFlag Software                    
            organizationalUnitName    = Technical Support Depart
            commonName                = wgzhao-demo.rflinux.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                EB:77:E0:22:DB:6C:A0:95:54:A9:90:BB:41:B5:DE:3F:AA:BA:EA:9A
            X509v3 Authority Key Identifier:
                keyid:80:8D:F3:90:A2:D0:3E:C2:B7:70:7B:A8:D3:A9:31:DA:5A:01:C2:63

Certificate is to be certified until Jun 21 04:26:40 2018 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

你可以把服务端私钥和证书合并,也可以分开,取决于ssl.conf配置文件的写法,后面会提到。

第三步,从安全角度考虑,我们单独给客户端生成有一个密钥
步骤和第二步生成服务端证书一样,只是在生成csr文件的时候,对Common Name没有要求。
假定你已经生成了client.key,client.csr,client.cert文件。
接着我们需要制作一张可便于携带的证书,即PKCS#12格式


# openssl pkcs12 -export -in client.cert -inkey client.key -out client.pfx
Enter pass phrase for client.key: <---客户端私钥密码
Enter Export Password: <---导出密码,在导入的时候需要用到
Verifying - Enter Export Password:


这样,我们就生成了一张可导入到浏览器的证书。

第四步 配置Apache
主要是配置/etc/httpd/conf.d/ssl.conf
要配置的主要是下面几行:


SSLCertificateFile /etc/pki/tls/certs/server.cert
SSLCertificateKeyFile  /etc/pki/tls/certs/server.key

SSLCACertificateFile /etc/pki/CA/rootca.cert
SSLCACertificatePath /etc/pki/CA

SSLVerifyClient require
SSLVerifyDepth  1


上面的配置可以分为三个部分,第一步分最开始两行,配置服务端的证书
如果在第二个步骤的时候,你已经把私钥和证书综合到了一起(cat server.key server.cert >server.pem),那么就只需要第一行就可以了,后面指向综合在一起的文件(这里是server.pem)。否则你可以像第二行那样指定私钥的位置。
接下来的两行是配置root CA的,其实,只要配置第一行就可以了。

最后两行很重要,SSLVerifyClient表示需要验证客户端,是参数是none,那就不验证客户端了,客户端和服务器端通信仅仅是通过SSL,但是谁也知道要通讯的对方是不是就是你需要的对方。
SSLVerifyDepth是验证深度,默认是10,改成1。这个参数的具体含义,我还是不太了解。

另外,你还需要把ssl.conf的虚拟主机配置成你填写Common Name时的域名,总而言之如果你Common Name填写的是yourdomin,那么浏览器访问的时候就只能是https://yourdomain,其他的否会报错。
配置完成后,重启Apache服务


# /etc/init.d/httpd start
Apache/2.2.3 mod_ssl/2.2.3 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server wgzhao-demo.rflinux.com:443 (RSA)
Enter pass phrase: <!--输入服务端证书的密钥

OK: Pass Phrase Dialog successful.




第五步,为客户端导入证书
以firefox 3.0浏览器为例子,打开浏览器,选择“编辑”--》“首先项”--》“高级”
点击“查看证书”按钮,在弹出的对话框里,点击“导入”按钮,然后导入前面生成的pfx文件。
接着会问你要密码,输入导出pfx文件时键入的导出密码。
然后重启浏览器,浏览你的域名,如果正常的话,会太初一个对话框,要你选择证书。
确定后,就可以看到网站内容。

上面的那些命令,如果你觉得参数太多,很难记住,那么openssl自带的那个Makefile文件倒是很有用,可以制作key文件,csr文件,cert文件。
不过制作cert文件需要注意,它采取的是自认证方式的,而不是采取root CA认证。

如果你觉得制作CA的那个步骤要创建文件也麻烦的话(是不是太懒了点?),那也有脚本,CA.pl可以除了创建CA外,也能创建cert等文件。如果你的 openssl包里没有自带这个perl脚本的话,你可以到这里来下载。


我遇到的一些错误及解决办法:

Q: 浏览器访问的时候,报错说超过了可协商的长度,错误号 -12227 ,然后页面上显示“ssl_error_rx_record_too_log”
A:在制作csr文件时填写的地址与ssl中虚拟主机不一致导致的

Q:SSL日志里有: [error] Certificate Verification: Error (20): unable to get local issuer certificate的报错。
fiefox浏览器浏览时给出下面的错误页面:
[quota]
节点没有识别并信任向你颁发证书的CA。

(错误码: ssl_error_unknown_ca_alert)
[/quota]

A:ssl.conf配置文件中没有定义SSLCACertificateFile,导致给出上面的错误。

Q: SSL日志里下面的错误:
[error] Certificate Verification: Certificate Chain too long (chain has 2 certificates, but maximum allowed are only 1)

A:这是校验深度的问题,将ssl.conf文件中的SSLVerfiyDepth值改大一点,比如改成6
分享到:
评论

相关推荐

    为IHS和WAS配置基于SSL证书的客户端认证

    总的来说,配置基于SSL证书的客户端认证是一项复杂但必要的任务,对于保护敏感数据和确保业务连续性至关重要。在实际操作中,需要对网络安全有深入的理解,并遵循最佳实践,以防止潜在的安全威胁。

    配置基于SSL的安全支付系统

    综上所述,配置基于SSL的安全支付系统是一个涉及多方面知识和技术的复杂过程,包括理解SSL协议、配置SSL证书、应用PKI、安装和优化服务器软件,以及关注用户体验等。每个环节都需要细心处理,以确保最终的支付环境既...

    基于谷歌SSL透明证书的子域名查询工具

    基于谷歌SSL透明证书的子域名查询工具,利用的是公共的SSL证书透明日志,这些日志记录了所有被颁发的SSL证书,包括那些为子域名颁发的证书。通过分析这些日志,工具能够揭示未公开或未知的子域名,从而帮助安全专家...

    springboot下配置SSL证书HTTPS访问

    SpringBoot 配置 SSL 证书实现 HTTPS 访问 SpringBoot 作为一个流行的 Java 框架, 提供了许多便捷的配置方式来实现 HTTPS 访问。HTTPS 是一种基于 SSL/TLS 加密的协议,用于确保数据在网络传输过程中的安全性。...

    OpenSSL生成的ssl证书

    本教程将详细介绍如何使用OpenSSL在Windows环境下为Nginx服务器配置HTTPS服务,以及如何生成和管理SSL证书。 首先,了解SSL证书的作用。SSL证书通过加密通信,确保了用户与服务器之间的数据传输不被第三方窃取或...

    PHPStudy(小皮)ssl证书批量替换工具

    **PHPStudy SSL证书批量替换工具** 在互联网领域,安全通信是至关重要的,特别是对于那些处理敏感数据的网站。SSL(Secure Socket Layer)证书是确保网站数据传输加密的关键元素,它通过建立安全的HTTPS连接来保护...

    可运营的SSL证书在线生成系统源码,附带图文搭建教程

    5. 部署证书:用户将生成的SSL证书下载并安装到其服务器上,完成安全配置。 三、系统架构 该可运营的SSL证书在线生成系统可能包括以下几个核心模块: 1. 用户管理模块:负责用户注册、登录、权限管理等功能。 2. ...

    本地生成SSL证书工具CreateCertGUICreateCertGUI

    "CreateCertGUI"是一个用户界面友好的本地SSL证书生成工具,它使得开发者和系统管理员无需深入理解复杂的命令行工具就能轻松创建自己的SSL证书。这个工具的特点在于它的易用性和免费性,任何人都可以无限制地使用它...

    服务器 SSL 证书安装配置指南

    #### 四、验证SSL证书配置 1. **使用在线工具验证**:可以通过在线SSL验证工具检查您的SSL证书是否正确安装。例如,您可以访问[SSL Labs](https://www.ssllabs.com/ssltest/)来测试您的网站。 2. **浏览器验证**:...

    ssl的简易配置

    本篇将基于提供的文件内容,深入讲解SSL的简易配置步骤,并涵盖Windows环境下的单双向认证、Tomcat服务器的SSL配置以及Linux环境下的SSL设置等内容。 #### Windows环境下的SSL配置 在Windows环境下进行SSL配置通常...

    ssl.rar_SSL 证书_ssl_ssl证书_证书生成

    SSL证书是验证网站身份的重要工具,它通过公钥和私钥技术来实现数据的加密,防止数据在传输过程中被窃取或篡改。 在SSL通信中,客户端(通常是浏览器)与服务器之间会进行一系列握手过程。首先,服务器会向客户端...

    Tomcat 开启基于https的SSL配置

    Tomcat 开启基于 HTTPS 的 SSL 配置 在互联网时代,安全性问题变得越来越重要,为了保护用户的隐私和数据,越来越多的网站开始使用 HTTPS 协议。Tomcat 作为一个流行的 Java Web 服务器,当然也支持 HTTPS 协议。...

    IIS7 部署SSL服务器证书视频文档

    【IIS7与SSL概述】 IIS7(Internet Information Services 7)是微软推出的一款强大的Web服务器,广泛...正确部署和配置SSL证书对于任何在线业务都是至关重要的,而WoSign的视频教程无疑为这一过程提供了有力的支持。

    EMQX开启SSL/TSL及生成证书流程

    生成SSL证书的过程通常包括创建私钥、CSR(Certificate Signing Request)以及申请和安装CA证书。以下是基本步骤: #### a. 创建私钥 使用OpenSSL工具生成一个RSA私钥,例如: ```bash openssl genpkey -...

    实训34配置Web服务的SSL证书.pptx

    本资源摘要信息将详细介绍配置 Web 服务的 SSL 证书的知识点,包括 SSL 证书的原理、IIS 的安全配置、WEB 服务器申请和下载证书的配置步骤、Windows CA 证书服务器的配置与功能等。 知识点 1: SSL 证书的原理 SSL...

    局域网13-SSL配置

    可以通过查看SSL配置日志、检查SSL证书的有效期、检查SSL私钥的安全性等方式来维护SSL配置。 常见配置错误举例 在配置SSL时,可能会出现一些常见的配置错误,例如: 1. SSL握手失败:可能是由于SSL证书或私钥配置...

    基于 MINA 的 TLS/SSL NIO Socket 实现(二)

    在这里,`sslContext`是`javax.net.ssl.SSLContext`的一个实例,它包含了关于SSL/TLS配置的所有信息,如证书、密钥和协议版本等。你需要先通过`SSLContext.getInstance()`方法选择合适的协议(如TLSv1.2),然后使用...

    Windows网络服务器配置-SSL网站证书应用.ppt

    本篇内容主要聚焦于公共密钥基础设施(PKI)和证书服务,以及如何在Web服务器上配置SSL证书以确保数据传输的安全。 **一、PKI与证书服务** 1. **公共密钥基础设施(PKI)**:PKI是一种基于公钥加密技术的系统,...

    基于SSL的linux下的例子

    本文将详细介绍如何在Linux上构建一个基于SSL的C-S(客户端-服务器)系统,以及如何生成所需的数字证书和密钥。 首先,C-S系统由服务器端和客户端两部分构成。服务器端负责监听指定的端口,可以设置最大等待的...

Global site tag (gtag.js) - Google Analytics