精华内容
下载资源
问答
  • X.509 用于 X.509 公钥证书属性证书、认证请求和认证路径验证的 ... composer require sop/x509 代码示例 示例位于/examples目录中。 创建 CA 证书 创建 CSR 颁发证书 验证认证路径 执照 该项目已获得MIT许可。
  • 公司产品中一个业务需要解析证书DN的各项属性,并提取某项属性属性值。之前的实现是将DN作为字符串进行操作,以逗号split之后遍历取出各项属性,再以等号split取出某项属性值。在碰到某个DN中有一个逗号(,)的特殊...


    前言

    公司产品中一个业务需要解析证书DN的各项属性,并提取某项属性的属性值。之前的实现是将DN作为字符串进行操作,以逗号split之后遍历取出各项属性,再以等号split取出某项属性值。在碰到某个DN中有一个逗号(,)的特殊格式后就会导致数组越界的问题。这种方式很不可取,遂查资料写了以下两种方式。


    一、使用 javax.naming.ldap.LdapName 类

    		LdapName ln = null;
            try {
                ln = new LdapName(dn);
            } catch (InvalidNameException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            for(Rdn rdn : ln.getRdns()) {
                System.out.println("LdapName--Type-- "+rdn.getType());
                System.out.println("LdapName--Value-- "+rdn.getValue());
            }
    

    这个方法是在网上查到,容易实现,不用引入其他jar包,是java自带的方法。符合RFC 2253规定的,类似于CN = Steve Kille,O = Isode Limited,C = CN这种格式的字符串都能解析。但在这个业务场景下,该方法的缺点是不能判断某个属性是否是证书DN中规定的属性。比如CNTest = Steve Kille,O = Isode Limited,C = CN,标准的证书DN项中没有CNTest 这一项,但是这种方法同样可以解析出来。

    二、使用 org.bouncycastle.asn1.x500.X500Name 类(推荐)

    基于以上原因,考虑到产品中的实际业务使用,翻阅bouncycastle的源码,写了如下方法。

    maven引入

            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcprov-jdk15on</artifactId>
                <version>1.51</version>
            </dependency>
    

    代码如下

    	private static Map<String, String> parseDNToMap(String dn) {
            
            if(StrUtil.isBlank(dn)) {
                return null;
            }
            
            Map<String, String> resMap = new HashMap<String, String>();
            
            X500Name x500Name = new X500Name(dn);
            
            RDN[] rdNs = x500Name.getRDNs();
            for (int i = 0; i < rdNs.length; i++) {
                
                AttributeTypeAndValue first = rdNs[i].getFirst();
    			//获取属性名的oid
                ASN1ObjectIdentifier type = first.getType();
                
                //将属性名的oid转换为属性名
                String typeString = BCStyle.INSTANCE.oidToDisplayName(type).toUpperCase();
                //或使用RFC4519Style.INSTANCE.oidToDisplayName(type).toUpperCase();
                
                //获取属性值
                String valueString = first.getValue().toString();
                
                resMap.put(typeString, valueString);
            }
            
            return resMap;
        }
    

    如果有非标准规定的属性名,会抛出异常如下

    Exception in thread "main" java.lang.IllegalArgumentException: Unknown object id - CNTest - passed to distinguished name
    	at org.bouncycastle.asn1.x500.style.IETFUtils.decodeAttrName(Unknown Source)
    	at org.bouncycastle.asn1.x500.style.BCStyle.attrNameToOID(Unknown Source)
    	at org.bouncycastle.asn1.x500.style.IETFUtils.rDNsFromString(Unknown Source)
    	at org.bouncycastle.asn1.x500.style.BCStyle.fromString(Unknown Source)
    	at org.bouncycastle.asn1.x500.X500Name.<init>(Unknown Source)
    	at org.bouncycastle.asn1.x500.X500Name.<init>(Unknown Source)
    	at com.certTest.x509NameTest.main(x509NameTest.java:86)
    
    

    总结

    以上两种方法亲测有效,如果只是要解析DN各项,第一种方法更方便。如果同时需要校验DN是否符合标准可选用第二种。

    展开全文
  • X.509证书DN详解

    千次阅读 2018-11-19 14:30:56
    X.509使用DN(Distinct Name)来唯一标识一个实体,其功能类似我们平常使用的ID,不过不同的是,DN不再是类似 123456 这样得数字标识,而是采用多个字段来标识一个实体,例如”CN=老所,C=CN”,这样做的好处在于方便...

    X.509使用DN(Distinct Name)来唯一标识一个实体,其功能类似我们平常使用的ID,不过不同的是,DN不再是类似 123456 这样得数字标识,而是采用多个字段来标识一个实体,例如”CN=老所,C=CN”,这样做的好处在于方便匹配到诸如LDAP一样的目录服务中。那么,DN的字段是否可以随意增加呢?比如我能否在”CN=老所,O=测试公司”这样一个DN上再增加一个ID属性,变成”CN=老所,O=测试公司,ID=123456″呢?

     

    动手测试。首先采用微软的 XEnroll 组件来进行测试。XEnroll 是微软平台下的 ActiveX 控件,提供证书的加入服务,比如创建 PKCS#10 证书请求。我们可以用 Javascript 来调用这个 ActiveX 控件:

    var sOID = '';
    var sDN = 'CN="老所",O="测试公司",ID="123456"';
    alert(sDN);
    var sPKCS10 = oXEnroll.createPKCS10(sDN, sOID);
    其中,createPKCS10 函数接受两个参数,第一个是字符串类型的DN,第二个是用以标识该证书请求的用途的OID,这里,我们不在乎该证书的用途,所以就设为空好了。通过 IE 运行该段代码后,我得到了 object Error,看来,不能这样简单地添加DN字段。

    于是开始搜索关于 X.509 DN 的信息。原来,X.509 证书里的 DN 属性,都是一些基于 ASN1 编码的对象,也就是说,对于我们熟知的 CN 属性,或者说 commonName 属性,程序是无法从证书里获得的,证书里是不会写诸如 CN=xxx 这样的信息的。所有字段都被表示为该字段类型的 OID 。OID 则是 ASN1 对象的统一表示方法,这种方法采用树状结构,由国际组织统一管理。一个公司如果要增加一个字段类型,并希望被广泛采用,它必须像管理 OID 的组织提出申请,就像我们常用的域名申请一样。

    在 www.oid-info.com 这个网站,我们可以查询所有注册过的 OID 信息。这个网站提供两种方式的查询:按树状结构展开各级 OID,或者直接填写诸如”2.3.4″这样的 OID 来进行查询。

    假如我们展开 2.5.4 这层 OID,我们就会发现很多我们常用的 DN 字段:

    2.5.4.3 - commonName
    2.5.4.4 - surname
    2.5.4.13 - description
    2.5.4.10 - organizationName
    ……
    既然如此,那我们就采用 OID 形式来添加属性类型吧,比如我使用 OID=2.5.4.888,这是一个未被注册的 OID,可以用来测试:

    var sOID = '';
    var sDN = 'CN="老所",O="测试公司",2.5.4.888="123456"';
    alert(sDN);
    var sPKCS10 = oXEnroll.createPKCS10(sDN, sOID);
    运行该脚步,成功了,我们从机器里的证书申请库里找到该证书申请,查看其属性:

    可以看出,虽然用 OID 添加属性成功了,但这个 OID 并不能被翻译成方便我们阅读的形式,就像我们只能使用 IP 而无法使用域名一样。要让该证书显示 ID= 而不是 2.5.4.888=,我们必须要:

    向标准组织注册 2.5.4.888 为 ID;
    通知微软,修改其 Windows 程序,将该 OID 翻译为 ID
    显然,这非常不现实,呵呵。

    接下来,我们再用 openssl 来测试一下。我选用的是 pyOpenSSL,一个 openssl 的 Python 包装库:

    >>> from OpenSSL import crypto
    >>> req = crypto.X509Req()
    >>> subject = req.get_subject()
    >>> setattr(subject, 'CN', 'soloman')
    >>> setattr(subject, 'ID', '123456')
    Traceback (most recent call last):
    File "", line 1, in 
    AttributeError: No such attribute
    >>>
    看来,pyOpenSSL也只认识 CN,不认识 ID。查询了一下 pyopenssl 的源代码:

    static int
    crypto_X509Name_setattr(crypto_X509NameObj *self, char *name, PyObject *value)
    {
    int nid;
    int result;
    char *buffer;
    if ((nid = OBJ_txt2nid(name)) == NID_undef)
    {
    PyErr_SetString(PyExc_AttributeError, "No such attribute");
    return -1;
    }
    ......
    可以看出,pyOpenSSL 在设置 DN 的时候,首先调用 openssl 的 OBJ_txt2nid()函数来将方便我们记忆的对象名字翻译成 OID, 然后再翻译成 openssl 程序里自己的 NID。

    那么继续查询 openssl 的源代码,在 objects.h 文件里我们找到了所有 DN 字段的定义:

    ......
    #define SN_commonName            "CN"
    #define LN_commonName            "commonName"
    #define NID_commonName            13
    #define OBJ_commonName            OBJ_X509,3L
    #define SN_countryName            "C"
    #define LN_countryName            "countryName"
    #define NID_countryName            14
    #define OBJ_countryName            OBJ_X509,6L
    #define SN_localityName            "L"
    #define LN_localityName            "localityName"
    #define NID_localityName        15
    #define OBJ_localityName        OBJ_X509,7L
    ......
    这里,openssl 为每个常用的 DN 属性定义了4个内容:SN, LN, NID, OBJ。其中 SN 表示 Short Name, LN 表示 Long Name,都是一个 OID 方便我们阅读的名称的两个形式,而 OBJ 则定义了其 OID 信息。

    在 openssl/crypto/asn1/a_strnid.c 这个文件里,绑定了 openssl 能够支持并翻译的 DN 字段:

    static ASN1_STRING_TABLE tbl_standard[] = {
    {NID_commonName,        1, ub_common_name, DIRSTRING_TYPE, 0},
    {NID_countryName,        2, 2, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK},
    {NID_localityName,        1, ub_locality_name, DIRSTRING_TYPE, 0},
    {NID_stateOrProvinceName,    1, ub_state_name, DIRSTRING_TYPE, 0},
    {NID_organizationName,        1, ub_organization_name, DIRSTRING_TYPE, 0},
    {NID_organizationalUnitName,    1, ub_organization_unit_name, DIRSTRING_TYPE, 0},
    {NID_pkcs9_emailAddress,    1, ub_email_address, B_ASN1_IA5STRING, STABLE_NO_MASK},
    {NID_pkcs9_unstructuredName,    1, -1, PKCS9STRING_TYPE, 0},
    {NID_pkcs9_challengePassword,    1, -1, PKCS9STRING_TYPE, 0},
    {NID_pkcs9_unstructuredAddress,    1, -1, DIRSTRING_TYPE, 0},
    {NID_givenName,            1, ub_name, DIRSTRING_TYPE, 0},
    {NID_surname,            1, ub_name, DIRSTRING_TYPE, 0},
    {NID_initials,            1, ub_name, DIRSTRING_TYPE, 0},
    {NID_serialNumber,        1, ub_serial_number, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK},
    {NID_friendlyName,        -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK},
    {NID_name,            1, ub_name, DIRSTRING_TYPE, 0},
    {NID_dnQualifier,        -1, -1, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK},
    {NID_domainComponent,        1, -1, B_ASN1_IA5STRING, STABLE_NO_MASK},
    {NID_ms_csp_name,        -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK}
    };
    可以看出,如果要让我们的基于 openssl 的程序支持一个我们自定义的属性,我们得修改 openssl 源代码,添加我们的新字段的”名称-OID” 绑定(可以只有Long Name),然后重新编译 openssl 和我们的程序,使其能使用新的属性。

    我们回过头来想想,为什么标准化组织没有为我们提供一个类似 ID 这样的属性呢?这是因为,DN本来就是作为 ID 来使用的,它把一些属性绑定起来,来标识一个实体,如果再有一个通用的 ID 属性,逻辑上就冲突了。当然针对具体的应用,你可以注册一个特殊的 ID 属性,比如 openID ,但这需要实力雄厚的公司来进行注册和推广。

    然而实际应用中,当我们想将证书系统与某个特别的应用中的某个 ID 进行绑定,而又不具备向国际组织进行 OID 注册和推广的能力时,我们完全可以利用现有的属性来进行实现,比如,针对这个需求,我可以设计出两个方案:

    方案一:CN=老所@123456
    方案二:CN=123456, surname=老, givenName=所
    方案三:CN=123456, name=老所
    方案四:CN=老所, description=123456
    方案一,通过一定的方式,将用户的姓名和ID组合到CN里,然后在应用中解析出ID,这个方法不是很便于用户书写,用户在填写证书申请资料的时候必须注意符合该规范。

    方案二与三的概念就是用CN来记录ID,毕竟,Common Name 嘛,随你如何定义。而用户的姓名由 surname + givenName 或者 name 来指定。该方法通过了 openssl 测试:

    >>> req = crypto.X509Req()
    >>> subject = req.get_subject()
    >>> setattr(subject, 'surname', 'Lao')
    >>> setattr(subject, 'givenName', 'Suo')
    >>> setattr(subject, 'name', 'Lao Suo')
    但是,XEnroll 仿佛不支持 surname + givenName 或者 name 属性,其文档上说明是支持 X.500 规范,而不是 X.509 规范。

    方案四,则利用了 description 属性来记录和具体应用相关的讯息,比如我们的 ID,该方法通过了 openssll 的测试:

    >>> req = crypto.X509Req()
    >>> subject = req.get_subject()
    >>> setattr(subject, 'CN', 'Lao Suo')
    >>> setattr(subject, 'description', '123456')
    和 XEnroll 的测试:
     

    展开全文
  • X.509证书DN之详解

    万次阅读 2010-09-21 10:26:00
    <br />X.509使用DN(Distinct Name)来唯一标识一个实体,其功能类似我们平常使用的ID,不过不同的是,DN不再是类似 123456 这样得数字标识,而是采用多个字段来标识一个实体,例如”CN=老所,C=CN”,这样做的...

    X.509使用DN(Distinct Name)来唯一标识一个实体,其功能类似我们平常使用的ID,不过不同的是,DN不再是类似 123456 这样得数字标识,而是采用多个字段来标识一个实体,例如”CN=老所,C=CN”,这样做的好处在于方便匹配到诸如LDAP一样的目录服务中。那么,DN的字段是否可以随意增加呢?比如我能否在”CN=老所,O=测试公司”这样一个DN上再增加一个ID属性,变成”CN=老所,O=测试公司,ID=123456″呢?

     

    动手测试。首先采用微软的 XEnroll 组件来进行测试。XEnroll 是微软平台下的 ActiveX 控件,提供证书的加入服务,比如创建 PKCS#10 证书请求。我们可以用 Javascript 来调用这个 ActiveX 控件:

    var sOID = '';
    var sDN = 'CN="老所",O="测试公司",ID="123456"';
    alert(sDN);
    var sPKCS10 = oXEnroll.createPKCS10(sDN, sOID);

    其中,createPKCS10 函数接受两个参数,第一个是字符串类型的DN,第二个是用以标识该证书请求的用途的OID,这里,我们不在乎该证书的用途,所以就设为空好了。通过 IE 运行该段代码后,我得到了 object Error,看来,不能这样简单地添加DN字段。

    于是开始搜索关于 X.509 DN 的信息。原来,X.509 证书里的 DN 属性,都是一些基于 ASN1 编码的对象,也就是说,对于我们熟知的 CN 属性,或者说 commonName 属性,程序是无法从证书里获得的,证书里是不会写诸如 CN=xxx 这样的信息的。所有字段都被表示为该字段类型的 OID 。OID 则是 ASN1 对象的统一表示方法,这种方法采用树状结构,由国际组织统一管理。一个公司如果要增加一个字段类型,并希望被广泛采用,它必须像管理 OID 的组织提出申请,就像我们常用的域名申请一样。

    www.oid-info.com 这个网站,我们可以查询所有注册过的 OID 信息。这个网站提供两种方式的查询:按树状结构展开各级 OID,或者直接填写诸如”2.3.4″这样的 OID 来进行查询。

    假如我们展开 2.5.4 这层 OID,我们就会发现很多我们常用的 DN 字段:

    • 2.5.4.3 - commonName
    • 2.5.4.4 - surname
    • 2.5.4.13 - description
    • 2.5.4.10 - organizationName
    • ……

    既然如此,那我们就采用 OID 形式来添加属性类型吧,比如我使用 OID=2.5.4.888,这是一个未被注册的 OID,可以用来测试:

    var sOID = '';
    var sDN = 'CN="老所",O="测试公司",2.5.4.888="123456"';
    alert(sDN);
    var sPKCS10 = oXEnroll.createPKCS10(sDN, sOID);

    运行该脚步,成功了,我们从机器里的证书申请库里找到该证书申请,查看其属性:

    可以看出,虽然用 OID 添加属性成功了,但这个 OID 并不能被翻译成方便我们阅读的形式,就像我们只能使用 IP 而无法使用域名一样。要让该证书显示 ID= 而不是 2.5.4.888=,我们必须要:

    • 向标准组织注册 2.5.4.888 为 ID;
    • 通知微软,修改其 Windows 程序,将该 OID 翻译为 ID

    显然,这非常不现实,呵呵。

    接下来,我们再用 openssl 来测试一下。我选用的是 pyOpenSSL,一个 openssl 的 Python 包装库:

    >>> from OpenSSL import crypto
    >>> req = crypto.X509Req()
    >>> subject = req.get_subject()
    >>> setattr(subject, 'CN', 'soloman')
    >>> setattr(subject, 'ID', '123456')
    Traceback (most recent call last):
    File "", line 1, in 
    AttributeError: No such attribute
    >>>
    

    看来,pyOpenSSL也只认识 CN,不认识 ID。查询了一下 pyopenssl 的源代码:

    static int
    crypto_X509Name_setattr(crypto_X509NameObj *self, char *name, PyObject *value)
    {
    int nid;
    int result;
    char *buffer;
    if ((nid = OBJ_txt2nid(name)) == NID_undef)
    {
    PyErr_SetString(PyExc_AttributeError, "No such attribute");
    return -1;
    }
    ......

    可以看出,pyOpenSSL 在设置 DN 的时候,首先调用 openssl 的 OBJ_txt2nid()函数来将方便我们记忆的对象名字翻译成 OID, 然后再翻译成 openssl 程序里自己的 NID。

    那么继续查询 openssl 的源代码,在 objects.h 文件里我们找到了所有 DN 字段的定义:

    ......
    #define SN_commonName			"CN"
    #define LN_commonName			"commonName"
    #define NID_commonName			13
    #define OBJ_commonName			OBJ_X509,3L
    #define SN_countryName			"C"
    #define LN_countryName			"countryName"
    #define NID_countryName			14
    #define OBJ_countryName			OBJ_X509,6L
    #define SN_localityName			"L"
    #define LN_localityName			"localityName"
    #define NID_localityName		15
    #define OBJ_localityName		OBJ_X509,7L
    ......

    这里,openssl 为每个常用的 DN 属性定义了4个内容:SN, LN, NID, OBJ。其中 SN 表示 Short Name, LN 表示 Long Name,都是一个 OID 方便我们阅读的名称的两个形式,而 OBJ 则定义了其 OID 信息。

    在 openssl/crypto/asn1/a_strnid.c 这个文件里,绑定了 openssl 能够支持并翻译的 DN 字段:

    static ASN1_STRING_TABLE tbl_standard[] = {
    {NID_commonName,		1, ub_common_name, DIRSTRING_TYPE, 0},
    {NID_countryName,		2, 2, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK},
    {NID_localityName,		1, ub_locality_name, DIRSTRING_TYPE, 0},
    {NID_stateOrProvinceName,	1, ub_state_name, DIRSTRING_TYPE, 0},
    {NID_organizationName,		1, ub_organization_name, DIRSTRING_TYPE, 0},
    {NID_organizationalUnitName,	1, ub_organization_unit_name, DIRSTRING_TYPE, 0},
    {NID_pkcs9_emailAddress,	1, ub_email_address, B_ASN1_IA5STRING, STABLE_NO_MASK},
    {NID_pkcs9_unstructuredName,	1, -1, PKCS9STRING_TYPE, 0},
    {NID_pkcs9_challengePassword,	1, -1, PKCS9STRING_TYPE, 0},
    {NID_pkcs9_unstructuredAddress,	1, -1, DIRSTRING_TYPE, 0},
    {NID_givenName,			1, ub_name, DIRSTRING_TYPE, 0},
    {NID_surname,			1, ub_name, DIRSTRING_TYPE, 0},
    {NID_initials,			1, ub_name, DIRSTRING_TYPE, 0},
    {NID_serialNumber,		1, ub_serial_number, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK},
    {NID_friendlyName,		-1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK},
    {NID_name,			1, ub_name, DIRSTRING_TYPE, 0},
    {NID_dnQualifier,		-1, -1, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK},
    {NID_domainComponent,		1, -1, B_ASN1_IA5STRING, STABLE_NO_MASK},
    {NID_ms_csp_name,		-1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK}
    };

    可以看出,如果要让我们的基于 openssl 的程序支持一个我们自定义的属性,我们得修改 openssl 源代码,添加我们的新字段的”名称-OID” 绑定(可以只有Long Name),然后重新编译 openssl 和我们的程序,使其能使用新的属性。

    我们回过头来想想,为什么标准化组织没有为我们提供一个类似 ID 这样的属性呢?这是因为,DN本来就是作为 ID 来使用的,它把一些属性绑定起来,来标识一个实体,如果再有一个通用的 ID 属性,逻辑上就冲突了。当然针对具体的应用,你可以注册一个特殊的 ID 属性,比如 openID ,但这需要实力雄厚的公司来进行注册和推广。

    然而实际应用中,当我们想将证书系统与某个特别的应用中的某个 ID 进行绑定,而又不具备向国际组织进行 OID 注册和推广的能力时,我们完全可以利用现有的属性来进行实现,比如,针对这个需求,我可以设计出两个方案:

    • 方案一:CN=老所@123456
    • 方案二:CN=123456, surname=老, givenName=所
    • 方案三:CN=123456, name=老所
    • 方案四:CN=老所, description=123456

    方案一,通过一定的方式,将用户的姓名和ID组合到CN里,然后在应用中解析出ID,这个方法不是很便于用户书写,用户在填写证书申请资料的时候必须注意符合该规范。

    方案二与三的概念就是用CN来记录ID,毕竟,Common Name 嘛,随你如何定义。而用户的姓名由 surname + givenName 或者 name 来指定。该方法通过了 openssl 测试:

    >>> req = crypto.X509Req()
    >>> subject = req.get_subject()
    >>> setattr(subject, 'surname', 'Lao')
    >>> setattr(subject, 'givenName', 'Suo')
    >>> setattr(subject, 'name', 'Lao Suo')
    

    但是,XEnroll 仿佛不支持 surname + givenName 或者 name 属性,其文档上说明是支持 X.500 规范,而不是 X.509 规范。

    方案四,则利用了 description 属性来记录和具体应用相关的讯息,比如我们的 ID,该方法通过了 openssll 的测试:

    >>> req = crypto.X509Req()
    >>> subject = req.get_subject()
    >>> setattr(subject, 'CN', 'Lao Suo')
    >>> setattr(subject, 'description', '123456')
    

    和 XEnroll 的测试:

    原文 http://blog.ipattern.org/archives/653

    展开全文
  • 在站点根目录下选择网站属性,在“目录安全性”选项卡单击“编辑安全通信”,单击“服务器证书”打开服务器证书向导,选择“创建一个新证书”=》“现在准备请求,但稍后发送”,依次输入,注意任何输入都不能出现...

     1,创建一个新的证书。
    在站点根目录下选择网站属性,在“目录安全性”选项卡单击“编辑安全通信”,单击“服务器证书”打开服务器证书向导,选择“创建一个新证书”=》“现在准备请求,但稍后发送”,依次输入,注意任何输入都不能出现中文,记住你保存CSR(Certificate Signature Request)的路径。

    2,转到 www.verisign.com,并单击“Get Trial SSL ID”。注册证书时,会要求你提供 CSR(证书签名请求),这就是第一步提到的那个要求记住路径的文件。复制并粘贴该文件中自行“BEGIN NEW CERTIFICATE REQUEST;”之后的内容。Verisign 在一小时内会以邮件形式将测试服务器端证书发送到你填写的email上。

    3,仔细阅读Verisign发给你的邮件,step by step安装该证书。我接收到的是证书内容是在邮件内的(即mail body)可能有些是以附件形式发送,总之按照向导做吧。如果你能看懂verisign里的英文的话,那么你应该可以顺利把证书安装到iis中去的。

    4,实施SSL连接。
    安装了服务器证书后,您便可以对 Web 服务器的客户实施 SSL 安全通道通讯。首先,您需要启用端口 443,以便在网站上进行安全通信。为此,请按照下列步骤操作: 1. 从计算机管理控制台中,右键单击您希望实施 SSL 的网站,然后单击属性。

    单击 Web 站点选项卡。在 Web 站点标识部分,验证 SSL 端口字段是否填充着数值 443。
    单击高级。您应该看到两个字段。IP 地址和网站的端口应该已经在此 Web 站点有多个标识字段中列出。如果没有列出端口 443,则在此 Web 站点有多个 SSL 标识字段下,单击添加。选择服务器的 IP 地址,在 SSL 端口字段中键入数值 443。单击确定。
    启用了端口 443 后,您便可以实施 SSL 连接了。为此,请按照下列步骤操作: 1. 单击目录安全性选项卡。在安全通信部分,请注意编辑现在已可用。单击编辑。
    选择需要安全通道(SSL)。注意:如果您指定 128 位加密,则使用 40 位或 56 位强度浏览器的客户端将无法与您的站点通信,除非他们升级加密强度。
    打开浏览器,试着用标准 http:// 协议连接您的 Web 服务器。如果实施了 SSL,您将收到如下错误消息:
    The page must be viewed over a secure channel
    The page you are trying to view requires the use of "https" in the address.

    Please try the following:Try again by typing https:// at the beginning of the address you are attempting to reach.HTTP 403.4 - Forbidden:SSL required Internet Information Services
    Technical Information (for support personnel) Background:This error indicates that the page you are trying to access is secured with Secure Sockets Layer (SSL).
    现在您只能使用 https:// 协议连接网站。

    5,为SSL连接配置客户端
    仔细阅读Verisign发给你的邮件,找到下载Test CA Root的链接,把test CA root下载到本地计算机(详情看verisign的向导)
    在浏览器选择internet选项,在Conten选项中点击证书...,选择导入,选择“将所有证书放置到以下存储区”,并单击“浏览”;选择“显示物理存储区”,展开“受信任的根目录证书颁发机构”节点,选择“本地计算机”。

    6,OK了。

    展开全文
  • RFC文档目录 RFC1 主机软件 ...RFC2459 Internet X.509 公钥基础设施:证书和CRL简介 RFC2460 Internet协议,版本6(IPv6)说明书 RFC2463 针对因特网协议第六版(Ipv6)的因特网控制报文协议(ICMPv6)规范 ...
  • openssl之带你走CA认证

    2020-04-24 00:06:36
    文章目录环境基本概念流程实现及签发证书示例 环境 直接安装openssl,最方便的是下载exe双击安装 安装之后需添加环境变量,才能全局使用openssl的命令 ...x509证书跟CER证书差不多,一般有PEM格式和...
  • 33.2将X.509身份验证添加到您的Web应用程序 253 33.3在Tomcat中设置SSL 254 34.运行认证替换 255 34.1概述 255 34.2配置 255 35. Spring Security加密模块 257 35.1简介 257 35.2加密器 257 35.2.1 BytesEncryptor ...
  • Java2核心技术第7版全两卷.pdf中文高清

    千次下载 热门讨论 2012-09-14 14:22:28
    9.4.4 x.509证书格式 654 9.4.5 证书的生成 654 9.4.6 证书签名 657 9.5 代码签名 663 9.5.1 jar文件签名 663 9.5.2 软件开发者证书 666 9.6 加密 667 9.6.1 对称密码 667 9.6.2 密码流 672 9.6.3 公共密钥...
  • 9.5.3 X.509证书格式 9.5.4 校验签名 9.5.5 认证问题 9.5.6 证书签名 9.5.7 证书请求 9.6 代码签名 9.6.1 JAR文件签名 9.6.2 软件开发者证书 9.7 加密 9.7.1 对称密码 9.7.2 密钥生成 9.7.3 密码流 9.7.4 公共密钥...
  • java核心技术第八版(1,2卷)源码

    千次下载 热门讨论 2009-04-04 21:04:35
     9.5.3 X.509证书格式  9.5.4 校验签名  9.5.5 认证问题  9.5.6 证书签名  9.5.7 证书请求  9.6 代码签名  9.6.1 JAR文件签名  9.6.2 软件开发者证书  9.7 加密  9.7.1 对称密码  9.7.2 密钥生成  9.7.3...
  • RFC中文文档-txt

    2009-09-11 14:56:56
    RFC2560 x.509因特网公钥基础设施在线证书状态协议——OCSP RFC2570 标准互联网络管理框架第三版介绍 RFC2577 FTP 安全考虑 RFC2581 TCP拥塞控制 RFC2582 TCP的快速恢复算法NewReno修正 RFC2585 Internet X.509 公共...
  • 中文版RFC,共456

    2009-04-19 22:56:29
    RFC2560 x.509因特网公钥基础设施在线证书状态协议——OCSP RFC2570 标准互联网络管理框架第三版介绍 RFC2577 FTP 安全考虑 RFC2581 TCP拥塞控制 RFC2582 TCP的快速恢复算法NewReno修正 RFC2585 Internet X.509 公共...
  • svn-1.4.3-setup.exe.7z

    2008-10-30 21:02:34
    请确认Apache运行的帐户是版本库目录的访问控制列表(右键目录|属性|安全)中一个明确的条目,对目录有完全的控制能力,否则,用户不能提交他们的修改。 即使Apache运行于本地系统,你仍然需要这个条目(这种情况下将...
  • 14.8.4 使用TreeView的层次化绑定 509 14.8.5 使用XSLT 511 14.8.6 绑定到来自其他源的XML内容 512 14.8.7 通过XmlDataSource更新XML 513 14.9 XML和ADO.NET数据集 513 14.9.1 把DataSet转换为XML 514 ...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...
  • 数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...
  • 数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...
  • php网络开发完全手册

    热门讨论 2009-03-02 13:17:26
    目录 第1章 PHP的介绍及环境搭建 2 1.1 PHP简介 2 1.1.1 PHP语言的发展简史 2 1.1.2 PHP的发展现状与未来展望 3 1.1.3 PHP语言的优势 3 1.1.4 相关资源及自学提示 4 1.2 PHP的应用范围及案例 5 1.2.1 PHP可以做什么 ...
  • 数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...
  • 实例027 屏蔽系统的ctrl+c/x/v组合键 实例028 避免按回车键产生“嘀”声 实例029 设置/屏蔽系统热键 2.3 键盘操作在实际中的应用 实例030 打开和关闭输入法编辑器 实例031 使用键盘控制窗体的移动 实例032 虚拟键盘...
  • 实例027 屏蔽系统的ctrl+c/x/v组合键 实例028 避免按回车键产生“嘀”声 实例029 设置/屏蔽系统热键 2.3 键盘操作在实际中的应用 实例030 打开和关闭输入法编辑器 实例031 使用键盘控制窗体的移动 实例032 虚拟键盘...
  • 实例027 屏蔽系统的ctrl+c/x/v组合键 实例028 避免按回车键产生“嘀”声 实例029 设置/屏蔽系统热键 2.3 键盘操作在实际中的应用 实例030 打开和关闭输入法编辑器 实例031 使用键盘控制窗体的移动 实例032 虚拟键盘...
  • 15.2.3 system.exception属性 376 15.2.4 没有处理异常时所发生 的情况 377 15.2.5 嵌套的 try块 378 15.3 用户定义的异常类 379 15.3.1 捕获用户定义的异常 380 15.3.2 抛出用户定义的异常 382 15.3.3 定义用户定义...
  • 15.2.3 system.exception属性 376 15.2.4 没有处理异常时所发生 的情况 377 15.2.5 嵌套的 try块 378 15.3 用户定义的异常类 379 15.3.1 捕获用户定义的异常 380 15.3.2 抛出用户定义的异常 382 15.3.3 定义用户定义...

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

x509证书目录属性