`
Changsmetoo
  • 浏览: 278 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

SSL证书

ssl 
阅读更多

本文借鉴以下文章:

http://reallifejava.com/configuring-ssl-in-wildfly-8/
http://www.360doc.com/content/12/0405/13/3200886_201082456.shtml
http://xeseo.blog.163.com/blog/static/5632431620130825428120/
http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html#Configuration

一、基础概念

证书与编码:
本质上,X.509证书是一个数字文档,这个文档根据RFC 5280来编码并/或签发。
实际上,“X.509证书”经常被用来指代IETF的PKIX(Public Key Infrastructure)证书和X.509 v3 证书标准中的CRL(Certificate Revocation List)。

编码(也用于扩展名)

.DER = 扩展名DER用于二进制DER编码的证书。这些证书也可以用CER或者CRT作为扩展名。比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。
.PEM = 扩展名PEM用于ASCII(Base64)编码的各种X.509 v3 证书。文件开始由一行"—– BEGIN …“开始。

常用的扩展名

.CRT = 扩展名CRT用于证书。证书可以是DER编码,也可以是PEM编码。扩展名CER和CRT几乎是同义词。这种情况在各种unix/linux系统中很常见。
.CER = CRT证书的微软型式。可以用微软的工具把CRT文件转换为CER文件(CRT和CER必须是相同编码的,DER或者PEM)。扩展名为CER的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.exe cryptext.dll, CyrptExtOpenCER),进而弹出一个对话框来导入并/或查看证书内容。
.KEY = 扩展名KEY用于PCSK#8的公钥和私钥。这些公钥和私钥可以是DER编码或者PEM编码。

CRT文件和CER文件只有在使用相同编码的时候才可以安全地相互替代。


二、自行颁发不受浏览器信任的SSL证书

1.生成一个RSA密钥和公钥

openssl genrsa -des3 -out 33iq.key 1024
openssl rsa -in 33iq.key -pubout -out 33iq.pub

2.拷贝一个不需要输入密码的密钥文件

openssl rsa -in 33iq.key -out 33iq_nopass.key

3.生成一个证书请求

openssl req -new -key 33iq.key -out 33iq.csr

4.自己签发证书

openssl x509 -req -days 365 -in 33iq.csr -signkey 33iq.key -out 33iq.crt

ps

第3个命令是生成证书请求,会提示输入省份、城市、域名信息等,重要的是,email一定要是你的域
名后缀的。这样就有一个 csr 文件了,提交给 ssl 提供商的时候就是这个 csr 文件。当然我这里
并没有向证书提供商申请,而是在第4步自己签发了证书。

三、编辑配置文件nginx.conf,给站点加上HTTPS协议

server {
server_name YOUR_DOMAINNAME_HERE;
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/33iq.crt;
ssl_certificate_key /usr/local/nginx/conf/33iq_nopass.key;
# 若ssl_certificate_key使用33iq.key,则每次启动Nginx服务器都要求输入key的密码。
}

四、只针对注册、登陆进行https加密处理

既然HTTPS能保证安全,为什么全世界大部分网站都仍旧在使用HTTP呢?使用HTTPS协议,对服务器来说是很大的负载开销。从性能上考虑,我 们无法做到对于每个用户的每个访问请求都进行安全加密(当然,Google这种大神除外)。作为一个普通网站,我们所追求的只是在进行交易、密码登陆等操 作时的安全。通过配置Nginx服务器,可以使用rewrite来做到这一点。既然HTTPS能保证安全,为什么全世界大部分网站都仍旧在使用HTTP呢?使用HTTPS协议,对服务器来说是很大的负载开销。从性能上考虑,我 们无法做到对于每个用户的每个访问请求都进行安全加密(当然,Google这种大神除外)。作为一个普通网站,我们所追求的只是在进行交易、密码登陆等操 作时的安全。通过配置Nginx服务器,可以使用rewrite来做到这一点。
在https server下加入如下配置:

if ($uri !~* "/logging.php$")
{
    rewrite ^/(.*)$ http://$host/$1 redirect;
}


在http server下加入如下配置:

if ($uri ~* "/logging.php$")
{
    rewrite ^/(.*)$ https://$host/$1 redirect;
}
这样用户会且只会在访问logging.php的情况下,才会通过https访问。

有一些开发框架会根据 $_SERVER[‘HTTPS’] 这个 PHP 变量是否为 on 来判断当前的访问请求是否是使用 https。为此我们需要在 Nginx 配置文件中添加一句来设置这个变量。遇到 https 链接重定向后会自动跳到 http 问题的同学可以参考一下。

server {
    ...
    listen 443;
    location \.php$ {
        ...
        include fastcgi_params;
        fastcgi_param HTTPS on; # 多加这一句
    }
} 
server {
    ...
    listen 80;
    location \.php$ {
        ...
        include fastcgi_params;
    }
}

四、wildfly ssl认证

A.制作证书

1.生成一个RSA密钥和公钥:

openssl genrsa -des3 -out domain.key 1024
openssl rsa -in domain.key -pubout -out domain.pub

2.拷贝一个不需要输入密码的密钥文件:

openssl rsa -in domain.key -out domain_nopass.key

3.生成一个证书请求:

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

4.CA认证,此处自己给自己认证:

openssl x509 -req -days 365 -in domain.csr -signkey domain.key -out domain.crt

5.创建pkcs12文件:

openssl pkcs12 -export -in domain.crt -inkey domain.key -out domain.p12 -name default -CAfile domain.crt -caname root

6.导入keystore文件:

keytool -importkeystore -deststorepass <secret password> -destkeypass <secret password> -destkeystore domain.jks -srckeystore domain.p12 -srcstoretype PKCS12 -srcstorepass <secret password used in csr> -alias default

B.wildfly文件配置

PS1:wildfly运行模式为standalone,wildfly解压包路径为/opt/wildfly-8.1.0.Final,需修改文件/opt/wildfly-8.1.0.Final/standalone/configuration/standalone.xml
PS2:在configuration下新建文件夹openssl,将生成的keystore文件复制到此文件夹下
<?xml version='1.0' encoding='UTF-8'?>

<server xmlns="urn:jboss:domain:2.1">
    <extensions>
        <extension module="org.jboss.as.clustering.infinispan"/>
        ……
        <extension module="org.wildfly.extension.undertow"/>
    </extensions>
    <management>
        <security-realms>
            <security-realm name="SslRealm">            #此段为添加
                <server-identities>
                    <ssl>
                         <keystore path="openssl/domain.jks" relative-to="jboss.server.config.dir" keystore-password="8546356"/>
                    </ssl>
                </server-identities>
            </security-realm>
            ……
        </security-realm>
    </management>
    <profile>
        <subsystem xmlns="urn:jboss:domain:undertow:1.1">
            <buffer-cache name="default"/>
            <server name="default-server">
                <https-listener name="default-ssl" socket-binding="https" security-realm="SslRealm"/>     #此行替换原有语句
                <host name="default-host" alias="localhost">
                    <location name="/" handler="welcome-content"/>
                    <filter-ref name="server-header"/>
                    <filter-ref name="x-powered-by-header"/>
                </host>
            </server>
            <servlet-container name="default">
                <jsp-config/>
            </servlet-container>
            <handlers>
                <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
            </handlers>
            <filters>
                <response-header name="server-header" header-name="Server" header-value="WildFly/8"/>
                <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
            </filters>
        </subsystem>
        ……
    </profile>

C.tomcat文件配置

PS1:tomcat是从官网(http://tomcat.apache.org/download-70.cgi)下载的二进制包,解压包路径为/opt/apache-tomcat-7.0.59,需修改文件/opt/apache-tomcat-7.0.59/conf/server.xml
PS2:将生成的keystore文件复制到/opt/apache-tomcat-7.0.59/conf文件夹下
PS3:tomcat server.xml文件自带ssl相关配置,修改即可
修改前ssl部分被注释掉:
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />
-->

修改后:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="150" enableLookups="false" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/domain.jks" keystorePass="8546356" />
分享到:
评论

相关推荐

    本地ssl证书生成工具

    在本地生成SSL证书,可以帮助开发者在测试环境中模拟真实环境的安全设置,而无需依赖第三方证书颁发机构(CA)。下面将详细介绍如何生成本地SSL证书以及相关知识点。 1. SSL证书概述: SSL证书包含一个公钥和一个...

    SSL证书在线生成系统源码

    SSL证书在线生成系统源码是实现网站安全的重要工具,它基于公钥基础设施(PKI)原理,用于在互联网上建立安全的数据传输通道。本系统允许用户通过在线方式申请并生成SSL证书,简化了传统SSL证书获取流程,提升了用户...

    ssl证书生成工具(sha256算法)

    弱哈希算法签名的SSL证书(CVE-2004-2761)。 远程服务使用SSL证书链,该证书链已使用加密弱哈希算法(例如MD2、MD4、MD5或SHA1)签名。这些签名算法很容易受到碰撞攻击。攻击者可以利用这一点生成另一个具有相同数字...

    android ssl证书验证

    SSL证书是身份验证的一种方式,它确保了用户与服务器之间的连接是安全的,数据传输是加密的。本文将深入探讨Android中的SSL证书验证过程、遇到的问题以及解决方案。 首先,理解SSL证书的基本结构和作用至关重要。...

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

    SSL证书是网络安全领域中的一个重要组成部分,它主要用于加密网站与用户之间的通信,确保数据在传输过程中不被窃取或篡改。本系统源码提供了一种可运营的解决方案,允许用户在线申请并管理SSL证书,无需通过第三方...

    windows 2003环境SSL证书安装

    在Windows Server 2003环境下安装SSL证书是确保网站或服务器通信安全的重要步骤。SSL(Secure Sockets Layer)证书是网络安全的一种机制,它通过加密数据传输,保护用户信息不被窃取。以下是对该过程的详细说明: ...

    ZABBIX监控SSL证书过期时间的监控工具-sslooker

    SSL证书是网络安全中不可或缺的一部分,它确保了网络通信的加密和身份验证。然而,SSL证书具有有效期,过期后可能导致安全问题,如浏览器警告、数据传输不安全等。因此,对于系统管理员而言,实时监控SSL证书的过期...

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

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

    本地生成SSL证书工具CreateCertGUICreateCertGUI

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

    ssl证书生成图形化工具.zip

    SSL证书是网络安全领域中的一个重要组成部分,它主要用于加密网络通信,确保数据在传输过程中不被窃取或篡改。本文将详细介绍“ssl证书生成图形化工具.zip”中的关键知识点,包括SSL证书、XCA工具、证书生成流程以及...

    K8S主机Prometheus监控ssl证书资源清单及镜像文件

    本文将深入探讨如何利用Prometheus监控K8S主机上的SSL证书资源,并介绍一个名为`prometheus-ssl-exporter`的镜像文件,它有助于提取和暴露SSL证书的相关信息。 首先,理解SSL证书对于K8S的重要性至关重要。SSL...

    OpenSSL生成的ssl证书

    **OpenSSL生成的ssl证书** 在互联网安全领域,SSL(Secure Socket Layer)证书是保障网站数据传输安全的重要工具。OpenSSL是一个开源的库,包含了各种加密算法,它提供了生成SSL证书的功能。本教程将详细介绍如何...

    Linux 生成SSL证书 供 nginx使用

    Linux 生成 SSL 证书供 nginx 使用是指通过 OpenSSL 命令生成 SSL 证书的过程,这个过程包括生成私钥、证书请求文件、证书文件和配置 nginx 使用证书。 首先,生成私钥文件使用以下命令:`openssl genrsa -des3 -...

    JDK生成ssl证书

    ### JDK生成SSL证书详解 #### 一、概述 在网络安全领域中,SSL(Secure Sockets Layer,安全套接层)证书扮演着至关重要的角色。它主要用于确保数据传输的安全性,防止信息被第三方窃取或篡改。对于企业级应用而言...

    SSL证书生成软件、包括转换证书格式

    SSL证书生成软件、包括转换证书格式

    免费SSL证书申请及配置

    知识点一:SSL证书概念及功能 SSL(Secure Sockets Layer,安全套接层)证书,是一种数字证书,用于在互联网上建立加密链接,目的是保障网站和用户之间的信息传输安全。该证书能够通过加密算法确保数据传输过程的...

    SSL证书安装.zip

    SSL证书是网络安全领域中的一个重要组成部分,它主要用于加密网络通信,确保数据在传输过程中不被窃取或篡改。本文将详细介绍如何在四种常见的服务器平台上安装SSL证书:Apache、IIS、Nginx和Tomcat。 1. **Apache...

    http过代理和忽略ssl证书

    2. **处理SSL证书**:在开发环境中,可以使用`requests`库的`verify=False`选项忽略证书验证,但生产环境中需要确保证书的正确性,可以使用自签名证书或信任的CA签发的证书。 3. **处理HTTPS通过代理**:对于HTTPS...

    ssl证书批量生成工具

    SSL证书批量生成工具是一种用于快速、高效地创建多个SSL(Secure Sockets Layer)证书的软件。在网络安全领域,SSL证书是保障网站数据传输安全的重要组件,它通过加密连接确保用户与服务器之间的通信不被第三方窃取...

Global site tag (gtag.js) - Google Analytics