代码之家  ›  专栏  ›  技术社区  ›  Ray Meyer

WSO2 Android代理证书

  •  1
  • Ray Meyer  · 技术社区  · 10 年前

    我正在使用WSO2的Enterprise Mobility Manager尝试将设备连接到它。

    我已经遵循了WSO2文档中的所有说明。以下是我所做的:

    • 我遵照客户的指示:

    其中包括从我在 iOS Server Configurations 。我完成了步骤2、3、4、5、6、7和11。

    然后我遵循了 git 使用ca_cert.pem和ca.p12创建.bks文件,我将其重命名为emm_truststore.bks,并按照说明添加到项目中。

    客户端仍有159个警告和0个错误。。。这些问题需要解决吗?正如我已经按原样导出了项目。大多数警告指示未使用或不推荐使用的方法。

    • 我按照指示建立了数据库,一切正常。
    • 启动服务器时,它会抛出:

    错误-启动tomcat连接器时出现LifeCycleException 原因:org.apcae.talina.LifeCycleException:Service.getName():“catalina”;协议处理程序启动失败 错误-初始化节俭传输时出错 错误-未能初始化授权服务

    MDM不起作用。

    然而,当我返回并撤消客户端设置中的步骤7,并将原始的client-truststore.jks、wso2carbon.jks和wso2mobiliemdm.jks文件放在安全文件夹中时,服务器启动时不会出现任何错误。 -我可以访问MDM界面,创建角色和策略,并向我的设备发送电子邮件。 -在我的设备上,我可以访问服务器,下载并安装apk。 -然后问题出现了,应用程序和服务器无法通信。“由于连接失败,身份验证失败。是否要重试?”

    所以我做了一些挖掘,可能的问题是由于以下原因之一:

    1. 存在连接问题。
    2. 证书不匹配。

    1) 关于连接,这是我的设置:我正在运行我的笔记本电脑(localhost)的服务器,它通过wifi连接到我们公司的网络。然后,我将设备连接到同一网络上。为了访问笔记本电脑上运行的“服务器”,我使用了笔记本电脑的IP。(因此我能够下载apk)。该设备也已通过我们的代理清除。这是问题的可能原因吗?

    2) 关于证书,我认真遵守了指示。然而,有一件事仍然困扰着我;当我导出我的项目时,Eclipse请求一个“密钥库”,然后我重新创建它。这是否会影响应用程序或其他地方的问题?

    2 回复  |  直到 10 年前
        1
  •  2
  •   Ray Meyer    10 年前

    原来我的问题出在我的证书上。以下是我解决问题的方法:

    1. 我将client-truststore.jks和wso2carbon.jks复制到一个文件夹中。
    2. 在文件夹中,我用下面的代码创建了一个批处理文件并执行了它。 *为了使此代码正常工作,您需要将 BouncyCastel.jar - bcprov-ext-jdk15on-1.46.jar 并将其复制到程序文件下的jre/ext文件夹中。 还要确保安装了SSL并在环境变量中设置了SSL,以及java的keytool。
    3. 执行批处理文件时,请确保正确设置密码;CA设置为“cacert”,RA设置为“racert”,IA设置为“iacert”。 当您到达KEYSTORE.p12、ca.p12和ra.p12导出时,将其密码分别设置为“wso2carbon”、“acert”和“racert”。 *在设置证书的公用名称时,请记住使用服务器IP。 *此外,当提示在client-truststore.jks和wso2carbon.jks中覆盖wso2carboro别名时,请回答yes。
    4. 接下来,将client-truststore.jks、wso2carbon.jks和wso2mobiledm.jks复制到/resources/security中,替换旧的。
    5. 将生成的emm_truststore.bks复制到应用程序中的res/raw文件夹,并更新CommonUtilities.java以反映信任库密码(在本例中为“wso2carbon”,如果需要,请在批处理文件中更改它)。
    6. 更新/repository/conf/mdm-conf.xml文件,就像 iOS server example 在点11。
    7. 最后,当您导出应用程序时,您可以使用wso2mobilemdm.jsk对应用程序进行签名。

    所有这些密码和别名都是为了简单起见而使用的,一旦理解了基本概念和工作方式,只要所有更改都得到适当反映,您就可以更改它们。

     openssl genrsa -out ca_private.key 4096
    openssl req -new -key ca_private.key -out ca.csr
    openssl x509 -req -days 365 -in ca.csr -signkey ca_private.key -out ca.crt -extensions v3_ca
    openssl rsa -in ca_private.key -text > ca_private.pem
    openssl x509 -in ca.crt -out ca_cert.pem
    
    openssl genrsa -out ra_private.key 4096
    openssl req -new -key ra_private.key -out ra.csr
    openssl x509 -req -days 365 -in ra.csr -CA ca.crt -CAkey ca_private.key -set_serial 02 -out ra.crt -extensions v3_req
    openssl rsa -in ra_private.key -text > ra_private.pem
    openssl x509 -in ra.crt -out ra_cert.pem
    
    openssl genrsa -out ia.key 4096
    openssl req -new -key ia.key -out ia.csr
    openssl x509 -req -days 730 -in ia.csr -CA ca_cert.pem -CAkey ca_private.pem -set_serial 044324343 -out ia.crt
    
    
    
    openssl pkcs12 -export -out KEYSTORE.p12 -inkey ia.key -in ia.crt -CAfile ca_cert.pem -name "wso2carbon"
    openssl pkcs12 -export -out ca.p12 -inkey ca_private.pem -in ca_cert.pem -name "cacert"
    openssl pkcs12 -export -out ra.p12 -inkey ra_private.pem -in ra_cert.pem -chain -CAfile ca_cert.pem -name "racert" 
    
    
    
    keytool -importkeystore -srckeystore KEYSTORE.p12 -srcstoretype PKCS12 -destkeystore wso2carbon.jks 
    keytool -importkeystore -srckeystore KEYSTORE.p12 -srcstoretype PKCS12 -destkeystore client-truststore.jks
    
    keytool -importkeystore -srckeystore ca.p12 -srcstoretype PKCS12 -destkeystore wso2mobilemdm.jks
    keytool -importkeystore -srckeystore ra.p12 -srcstoretype PKCS12 -destkeystore wso2mobilemdm.jks
    
    set CLASSPATH=%CLASSPATH%;c:\bcprov-ext-jdk15on-1.46.jar
    keytool -importcert -trustcacerts -keystore emm_truststore.bks -storetype bks -storepass wso2carbon -file ca_cert.pem -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath ./
    
        2
  •  0
  •   Dilshan    10 年前

    好的,我认为从您的描述来看,在第一部分中设置jks文件时似乎有问题。与文档中一样,您必须创建SSL证书。还有CA证书。然后,您需要确保SSL证书需要由CA签名。这样,当您将CA嵌入bks文件中时,它将识别通信,因为下划线SSL通道与CA签名的SSL证书一起运行。我认为你在第一阶段搞砸的是wso2carbon.jks的关键导入。请确保使用现有别名正确导入。如果更改别名,则需要更改更多文件。确保它与我们在repository/conf文件夹中的mdm-config.xml中提供的别名相同。同样的东西也需要导入到客户端信任库中。如果正确遵循这一点,它将起作用。权限问题与此证书问题相关,因为它无法识别有效的SSL证书。

    从编译方面来说,我不认为这是个问题,但安装最新的Android SDK总是更好。

    关于您的第二次尝试,这与证书有关。wso2mobilemdm.js附带了一个预先生成的CA。服务器将处理此问题。但是为了让它与客户机一起工作,您需要从密钥库文件中取出CA。为此,您可以使用OpenSSL获取CA并将其嵌入到您生成的bks文件中。另一件事是,您可以使用相同的jks文件,并使用 portecle 。这样,您可以简单地使用现有的。

    尝试该设置的最简单方法是使用HTTP而不是HTTPS与Android代理应用程序通信。这样可以工作,但不推荐。这只是为了测试该套件是否完美工作。为此,您可以更改Android代理应用程序中的配置条目,即使您在bk中没有任何条目,它也不会出现任何问题。

    希望这有帮助。让我知道这对你是否有效。