SOAPUi和密钥库

13

最近,我需要加强我与一个Web服务之间的SOAP通信。在我的服务器上创建私钥文件并创建/发送CSR后,收到了以PEM格式的证书文件。

我想在SOAPUi中测试它,但它一直提示“错误:拒绝访问。需要客户端SSL证书”。以下是我所做的:

  • 证书转换

openssl pkcs12 -export -out **certif.p12** -inkey **myprivatekey.pem** -in **Certificate-received.pem**
  • 导入密钥库

  • keytool -importkeystore -deststorepass **changeit** -destkeypass **changeit** -destkeystore **pierrejks.jks** -srckeystore **certif.p12** -srcstoretype PKCS12 -srcstorepass **tenzin** -alias 1
    

    在SOAPUi中,

    我进入了首选项并在SSL设置选项卡中,

    • 密钥库被设置为pierrejks.jks

    • 密钥库密码提供为:changeit

    • 需要客户端身份验证被打勾了。

    现在在项目上(右键单击项目根目录,然后显示项目视图),我进入了WS-Security配置密钥库选项卡,以添加一个新的源。

    • 源是指向pierrejks.jks文件的路径
    • 密码是changeit
    • 默认别名设置为pierrealias
    • 未提供别名密码

    填写这些信息后,状态变为“ok”

    Outgoing WS-Security Configurations中,添加了一个配置,其中包含一个新的WSS-Entry Encryption

    • 配置名称是pierreconf
    • WSS Entry类型是Encryption
    • 选择的密钥库是pierrejks.jks
    • 别名是1
    • 密码是changeit

    最后,使用pierreconf的Outgoing WSS配置文件进行请求,这是我遇到错误的地方。此时,如果我理解正确,RAW选项卡显示它已被加密:

    POST https://gsxapi.apple.com/gsx-ws/services/emea/iphone HTTP/1.1
    Accept-Encoding: gzip,deflate
    Content-Type: text/xml;charset=UTF-8
    SOAPAction: "urn:authenticate"
    Content-Length: 3047
    Host: gsxapi.apple.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
    
        <soapenv:Envelope xmlns:glob="http://gsxws.apple.com/elements/global" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
           <soapenv:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><xenc:EncryptedKey Id="EK-974B3C3F270F85DA2A143289398095719" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"/><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><wsse:SecurityTokenReference><ds:X509Data><ds:X509IssuerSerial><ds:X509IssuerName>C=US,O=Apple Inc.,OU=Certification Authority,CN=Apple Corporate External Authentication CA 1</ds:X509IssuerName><ds:X509SerialNumber>6119460251051586160</ds:X509SerialNumber></ds:X509IssuerSerial></ds:X509Data></wsse:SecurityTokenReference></ds:KeyInfo><xenc:CipherData><xenc:CipherValue>yWIQ5aWqy50ba/kaw3mLYyvpBL8S+mcQnkZri8q6deJXoNFZm+TGOry9ds5VCbsYzpgjAYGFRZxnEfnAirFDqojUgbthc6E/YeG15y1GShiBZrBB3U5KVk6ZIqRaOAVSBMCG5DXosFDz0I/MrToMA8MvX5A26pgp6siM6fhfVRLfFPDCJQOQJw3gr2G3IUnu0t4jf2BIs4FPObtOZSN1ou+w3ny2meL2F0VhT2UPDbZ46EKwHiY7Az9RVt0MocWRRQSR9FU4h6zqziWbUC95OrzrKXrbo01La8UDZ4mykQXqg==</xenc:CipherValue></xenc:CipherData><xenc:ReferenceList><xenc:DataReference URI="#ED-974B3C3F270F85DA2A143289398095720"/></xenc:ReferenceList></xenc:EncryptedKey></wsse:Security></soapenv:Header>
           <soapenv:Body><xenc:EncryptedData Id="ED-974B3C3F270F85DA2A143289398095720" Type="http://www.w3.org/2001/04/xmlenc#Content" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><wsse:SecurityTokenReference wsse11:TokenType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKey" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd"><wsse:Reference URI="#EK-974B3C3F270F85DA2A143289398095719"/></wsse:SecurityTokenReference></ds:KeyInfo><xenc:CipherData><xenc:CipherValue>cYyhZSw7/XR9Gtj7+lzkwwilTlpuAHVYdT+v8WeofYo48j8K0CReBIdeUI3pfWQ+cEj1D+VQO1k7e6fCsDuK7vZfrCG2qrYDlJmChnDrR7Tr5QSpC/ES3ohnYFqRrNnaOAhgjrqtDevww/S0dUKxmAFEbY18rvbF+l1T32da53zo1b9mN+sD9oKdWq7w+1eJHZOpJ4WQuMcdHp9DqAxizu4nc4FX65myZieI2qoWTzKGqeNMbqqyFFVpQ0iqI+7sT5Rh9Qc/Sw9pZMHxx3x856+PH/4PExTj/00f7rzhy6MhxEFavHksBraeGU6Ctd+xRMaA4Y/ZXGytf6M9C5j0v2SDqAFtwtj9Sky2uRzsXlNwmjinI29SsGAcOOBvyB7+Ff8rSATR3snMgvuNN3l0GsLDP1tzqz7vhHkCeKtsRCC8xtOqsZsz9QEmB31Gz3QMilsmsyhjdZ5QUsc+VU/HJhON2pzk7xL+V8zupc/uDoeg9AS38lti2nid5WDLAdG8j1IAU7ox/tJnAs7NTti9XN2nTcHf9u7laQfEm7i4VaLkn6hHsXf7JTE5GBkTF2sbR0cpSnIi2fYbHlU6EIugTgwU0875enhRQiyHhb84QByTfxig0bXaMCMnHDkdjH41+HoKu5SGxoPOyKp/JDpQaPY3J56RFrp0j8tRlqpUYIU=</xenc:CipherValue></xenc:CipherData></xenc:EncryptedData></soapenv:Body>
        </soapenv:Envelope>
    

    返回信息为

    HTTP/1.1 401 Access Denied
    Connection: close
    Content-Length: 57
    Content-Type: text/html
    Cache-Control: no-cache,no-store
    Pragma: no-cache
    
    Error: Access is Denied. Client SSL Certificate Required.
    

    目前我不太清楚如何使用SSL。

    我确定我犯了一些错误,有人能指点我正确的方向吗?


    你需要使用Web服务提供的证书。自己创建并使用它有点像用错误的钥匙解锁汽车。 - Tim Biegeleisen
    嗨,Tim。感谢分享。 Certificate-received.pem是由苹果提供给联系他们的Web服务的。在我的一侧生成CSR(使用我的私钥文件)之后创建了它。 我没有创建新文件,但已将其转换为PKCS12,因为似乎keytool无法直接在密钥库中导入PEM文件。 皮埃尔 - Tanc
    1个回答

    15

    做完了!

    信息:我的SOAPUi版本为5.0 我决定只使用p12文件而不是JKS作为密钥库

    以下是我所做的步骤:

    创建PKCS12文件

    使用我的privatekey.pem文件(用于生成CSR文件)和接收到的certificate.pem文件(由第三方根据先前的CSR文件生成)

    openssl pkcs12 -export -out certif.p12 -inkey myprivatekey.pem -in Certificate-received.pem
    

    关于问题:

    • 输入myprivatekey.pem的密码短语:我已经输入了用来生成我的私钥的密码。
    • 输入导出密码tenzin
    • 验证 - 输入导出密码tenzin

    在SOAP UI中

    在首选项中,

    1. certif.p12被选择为密钥库。
    2. 给出的密码是tenzin
    3. 需要客户端身份验证已被选中。

    它有效。


    好的!这对我也起作用了。注意,您不必在请求中添加授权设置,只需在全局首选项中添加即可! - MeanGreen
    使用JKS密钥库作为身份提供者似乎存在问题。对我来说,使用PKCS#12可以正常工作。谢谢。 - 0x0me
    搞定了。.cer文件不包含私钥,而pfx无法使用。我不得不将其转换为p12文件,然后soapUI才能正常工作。 - hamish

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接