From 54ffa5f4c898dbe4dd72117bfa08e7f1b8b53b1a Mon Sep 17 00:00:00 2001 From: Nick Gaski Date: Fri, 15 Dec 2017 12:40:48 -0500 Subject: [PATCH] [FAB-7241] Fix chaincode-devmode This CR replaces the expired certificates with the msp library in fabric/sampleconfig. Regenerate the orderer.block and myc.tx artifact using the configtx.yaml in fabric/sampleconfig. Profiles used are SampleSingleMSPSolo & SampleSingleMSPChannel. Modify the orderer profile in configtxyaml and change address from 127.0.0.1:7050 -> orderer:7050 before reading in the file to configtxgen. This allows the peer to resolve with the ordering service when the docker compose is spun up. Change CORE_PEER_ADDRESS from 7051 to 7052 when starting the chaincode in dev mode. Change-Id: I0dbd3f81553c85943a4219123f086e69081c4f5a Signed-off-by: Nick Gaski --- chaincode-docker-devmode/README.rst | 2 +- .../msp/admincerts/admincert.pem | 26 ++++++++---------- .../msp/cacerts/cacert.pem | 26 +++++++++--------- chaincode-docker-devmode/msp/config.yaml | 8 ------ chaincode-docker-devmode/msp/keystore/key.pem | 10 +++---- .../msp/signcerts/peer.pem | 26 ++++++++---------- .../msp/tlscacerts/tlsroot.pem | 13 +++++++++ .../tlsintermediatecerts/tlsintermediate.pem | 14 ++++++++++ chaincode-docker-devmode/myc.tx | Bin 360 -> 274 bytes chaincode-docker-devmode/orderer.block | Bin 8668 -> 7902 bytes 10 files changed, 70 insertions(+), 55 deletions(-) delete mode 100644 chaincode-docker-devmode/msp/config.yaml mode change 100644 => 100755 chaincode-docker-devmode/msp/keystore/key.pem create mode 100644 chaincode-docker-devmode/msp/tlscacerts/tlsroot.pem create mode 100644 chaincode-docker-devmode/msp/tlsintermediatecerts/tlsintermediate.pem diff --git a/chaincode-docker-devmode/README.rst b/chaincode-docker-devmode/README.rst index b9f64dd139..327e80ff08 100644 --- a/chaincode-docker-devmode/README.rst +++ b/chaincode-docker-devmode/README.rst @@ -93,7 +93,7 @@ Now run the chaincode: .. code:: bash - CORE_PEER_ADDRESS=peer:7051 CORE_CHAINCODE_ID_NAME=mycc:0 ./chaincode_example02 + CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./chaincode_example02 The chaincode is started with peer and chaincode logs indicating successful registration with the peer. Note that at this stage the chaincode is not associated with any channel. This is done in subsequent steps diff --git a/chaincode-docker-devmode/msp/admincerts/admincert.pem b/chaincode-docker-devmode/msp/admincerts/admincert.pem index 5f6293ac39..415d5617b7 100644 --- a/chaincode-docker-devmode/msp/admincerts/admincert.pem +++ b/chaincode-docker-devmode/msp/admincerts/admincert.pem @@ -1,16 +1,14 @@ -----BEGIN CERTIFICATE----- -MIICjDCCAjKgAwIBAgIUBEVwsSx0TmqdbzNwleNBBzoIT0wwCgYIKoZIzj0EAwIw -fzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh -biBGcmFuY2lzY28xHzAdBgNVBAoTFkludGVybmV0IFdpZGdldHMsIEluYy4xDDAK -BgNVBAsTA1dXVzEUMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMTYxMTExMTcwNzAw -WhcNMTcxMTExMTcwNzAwWjBjMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGgg -Q2Fyb2xpbmExEDAOBgNVBAcTB1JhbGVpZ2gxGzAZBgNVBAoTEkh5cGVybGVkZ2Vy -IEZhYnJpYzEMMAoGA1UECxMDQ09QMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE -HBuKsAO43hs4JGpFfiGMkB/xsILTsOvmN2WmwpsPHZNL6w8HWe3xCPQtdG/XJJvZ -+C756KEsUBM3yw5PTfku8qOBpzCBpDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYw -FAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOFC -dcUZ4es3ltiCgAVDoyLfVpPIMB8GA1UdIwQYMBaAFBdnQj2qnoI/xMUdn1vDmdG1 -nEgQMCUGA1UdEQQeMByCCm15aG9zdC5jb22CDnd3dy5teWhvc3QuY29tMAoGCCqG -SM49BAMCA0gAMEUCIDf9Hbl4xn3z4EwNKmilM9lX2Fq4jWpAaRVB97OmVEeyAiEA -25aDPQHGGq2AvhKT0wvt08cX1GTGCIbfmuLpMwKQj38= +MIICNjCCAd2gAwIBAgIRAMnf9/dmV9RvCCVw9pZQUfUwCgYIKoZIzj0EAwIwgYEx +CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4g +RnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMQwwCgYDVQQLEwND +T1AxHDAaBgNVBAMTE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcxMTEyMTM0MTEx +WhcNMjcxMTEwMTM0MTExWjBpMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv +cm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEMMAoGA1UECxMDQ09QMR8wHQYD +VQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D +AQcDQgAEZ8S4V71OBJpyMIVZdwYdFXAckItrpvSrCf0HQg40WW9XSoOOO76I+Umf +EkmTlIJXP7/AyRRSRU38oI8Ivtu4M6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1Ud +EwEB/wQCMAAwKwYDVR0jBCQwIoAginORIhnPEFZUhXm6eWBkm7K7Zc8R4/z7LW4H +ossDlCswCgYIKoZIzj0EAwIDRwAwRAIgVikIUZzgfuFsGLQHWJUVJCU7pDaETkaz +PzFgsCiLxUACICgzJYlW7nvZxP7b6tbeu3t8mrhMXQs956mD4+BoKuNI -----END CERTIFICATE----- diff --git a/chaincode-docker-devmode/msp/cacerts/cacert.pem b/chaincode-docker-devmode/msp/cacerts/cacert.pem index 8d98dfa59e..22dfce9899 100644 --- a/chaincode-docker-devmode/msp/cacerts/cacert.pem +++ b/chaincode-docker-devmode/msp/cacerts/cacert.pem @@ -1,15 +1,15 @@ -----BEGIN CERTIFICATE----- -MIICYjCCAgmgAwIBAgIUB3CTDOU47sUC5K4kn/Caqnh114YwCgYIKoZIzj0EAwIw -fzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh -biBGcmFuY2lzY28xHzAdBgNVBAoTFkludGVybmV0IFdpZGdldHMsIEluYy4xDDAK -BgNVBAsTA1dXVzEUMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMTYxMDEyMTkzMTAw -WhcNMjExMDExMTkzMTAwWjB/MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv -cm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEChMWSW50ZXJuZXQg -V2lkZ2V0cywgSW5jLjEMMAoGA1UECxMDV1dXMRQwEgYDVQQDEwtleGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKIH5b2JaSmqiQXHyqC+cmknICcF -i5AddVjsQizDV6uZ4v6s+PWiJyzfA/rTtMvYAPq/yeEHpBUB1j053mxnpMujYzBh -MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQXZ0I9 -qp6CP8TFHZ9bw5nRtZxIEDAfBgNVHSMEGDAWgBQXZ0I9qp6CP8TFHZ9bw5nRtZxI -EDAKBggqhkjOPQQDAgNHADBEAiAHp5Rbp9Em1G/UmKn8WsCbqDfWecVbZPQj3RK4 -oG5kQQIgQAe4OOKYhJdh3f7URaKfGTf492/nmRmtK+ySKjpHSrU= +MIICYjCCAgigAwIBAgIRAL1fEAnz5zp4moJ8MdSb/lYwCgYIKoZIzj0EAwIwgYEx +CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4g +RnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMQwwCgYDVQQLEwND +T1AxHDAaBgNVBAMTE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcxMTEyMTM0MTEx +WhcNMjcxMTEwMTM0MTExWjCBgTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlm +b3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhh +bXBsZS5jb20xDDAKBgNVBAsTA0NPUDEcMBoGA1UEAxMTY2Eub3JnMS5leGFtcGxl +LmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGrsQ6oJpk6hDWf63HU3OSNd +bou9KNw/VIee1IngPDI4YJU7O+Xa/XLJuwnFv7BpR8Ytl3f+njC8i/RZP2/svO+j +XzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQF +MAMBAf8wKQYDVR0OBCIEIIpzkSIZzxBWVIV5unlgZJuyu2XPEeP8+y1uB6LLA5Qr +MAoGCCqGSM49BAMCA0gAMEUCIQDUh/+CC2dAICnYtACXspwUaaEbiyZxYIx+XDvW +o8VVcgIgGz5S4iC5+xkxgeaISPfxKTTVy6yzTdYGzCw1vPppjzo= -----END CERTIFICATE----- diff --git a/chaincode-docker-devmode/msp/config.yaml b/chaincode-docker-devmode/msp/config.yaml deleted file mode 100644 index 63bec1e0d0..0000000000 --- a/chaincode-docker-devmode/msp/config.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -OrganizationalUnitIdentifiers: - - Certificate: "cacerts/cacert.pem" - OrganizationalUnitIdentifier: "COP" diff --git a/chaincode-docker-devmode/msp/keystore/key.pem b/chaincode-docker-devmode/msp/keystore/key.pem old mode 100644 new mode 100755 index ba48df9180..797d567a5c --- a/chaincode-docker-devmode/msp/keystore/key.pem +++ b/chaincode-docker-devmode/msp/keystore/key.pem @@ -1,5 +1,5 @@ ------BEGIN EC PRIVATE KEY----- -MHcCAQEEIAsWwFunEzqz1Rh6nvD4MiPkKCtmoxzh3jTquG5MSbeLoAoGCCqGSM49 -AwEHoUQDQgAEHBuKsAO43hs4JGpFfiGMkB/xsILTsOvmN2WmwpsPHZNL6w8HWe3x -CPQtdG/XJJvZ+C756KEsUBM3yw5PTfku8g== ------END EC PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXa3mln4anewXtqrM +hMw6mfZhslkRa/j9P790ToKjlsihRANCAARnxLhXvU4EmnIwhVl3Bh0VcByQi2um +9KsJ/QdCDjRZb1dKg447voj5SZ8SSZOUglc/v8DJFFJFTfygjwi+27gz +-----END PRIVATE KEY----- diff --git a/chaincode-docker-devmode/msp/signcerts/peer.pem b/chaincode-docker-devmode/msp/signcerts/peer.pem index 5f6293ac39..415d5617b7 100644 --- a/chaincode-docker-devmode/msp/signcerts/peer.pem +++ b/chaincode-docker-devmode/msp/signcerts/peer.pem @@ -1,16 +1,14 @@ -----BEGIN CERTIFICATE----- -MIICjDCCAjKgAwIBAgIUBEVwsSx0TmqdbzNwleNBBzoIT0wwCgYIKoZIzj0EAwIw -fzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh -biBGcmFuY2lzY28xHzAdBgNVBAoTFkludGVybmV0IFdpZGdldHMsIEluYy4xDDAK -BgNVBAsTA1dXVzEUMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMTYxMTExMTcwNzAw -WhcNMTcxMTExMTcwNzAwWjBjMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGgg -Q2Fyb2xpbmExEDAOBgNVBAcTB1JhbGVpZ2gxGzAZBgNVBAoTEkh5cGVybGVkZ2Vy -IEZhYnJpYzEMMAoGA1UECxMDQ09QMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE -HBuKsAO43hs4JGpFfiGMkB/xsILTsOvmN2WmwpsPHZNL6w8HWe3xCPQtdG/XJJvZ -+C756KEsUBM3yw5PTfku8qOBpzCBpDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYw -FAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOFC -dcUZ4es3ltiCgAVDoyLfVpPIMB8GA1UdIwQYMBaAFBdnQj2qnoI/xMUdn1vDmdG1 -nEgQMCUGA1UdEQQeMByCCm15aG9zdC5jb22CDnd3dy5teWhvc3QuY29tMAoGCCqG -SM49BAMCA0gAMEUCIDf9Hbl4xn3z4EwNKmilM9lX2Fq4jWpAaRVB97OmVEeyAiEA -25aDPQHGGq2AvhKT0wvt08cX1GTGCIbfmuLpMwKQj38= +MIICNjCCAd2gAwIBAgIRAMnf9/dmV9RvCCVw9pZQUfUwCgYIKoZIzj0EAwIwgYEx +CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4g +RnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMQwwCgYDVQQLEwND +T1AxHDAaBgNVBAMTE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcxMTEyMTM0MTEx +WhcNMjcxMTEwMTM0MTExWjBpMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv +cm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEMMAoGA1UECxMDQ09QMR8wHQYD +VQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D +AQcDQgAEZ8S4V71OBJpyMIVZdwYdFXAckItrpvSrCf0HQg40WW9XSoOOO76I+Umf +EkmTlIJXP7/AyRRSRU38oI8Ivtu4M6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1Ud +EwEB/wQCMAAwKwYDVR0jBCQwIoAginORIhnPEFZUhXm6eWBkm7K7Zc8R4/z7LW4H +ossDlCswCgYIKoZIzj0EAwIDRwAwRAIgVikIUZzgfuFsGLQHWJUVJCU7pDaETkaz +PzFgsCiLxUACICgzJYlW7nvZxP7b6tbeu3t8mrhMXQs956mD4+BoKuNI -----END CERTIFICATE----- diff --git a/chaincode-docker-devmode/msp/tlscacerts/tlsroot.pem b/chaincode-docker-devmode/msp/tlscacerts/tlsroot.pem new file mode 100644 index 0000000000..106252261f --- /dev/null +++ b/chaincode-docker-devmode/msp/tlscacerts/tlsroot.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB8jCCAZigAwIBAgIRANxd4D3sY0656NqOh8Rha0AwCgYIKoZIzj0EAwIwWDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xDTALBgNVBAoTBE9yZzIxDTALBgNVBAMTBE9yZzIwHhcNMTcwNTA4 +MDkzMDM0WhcNMjcwNTA2MDkzMDM0WjBYMQswCQYDVQQGEwJVUzETMBEGA1UECBMK +Q2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzENMAsGA1UEChMET3Jn +MjENMAsGA1UEAxMET3JnMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDYy+qzS +J/8CMfhpBFhUhhz+7up4+lwjBWDSS01koszNh8camHTA8vS4ZsN+DZ2DRsSmRZgs +tG2oogLLIdh6Z1CjQzBBMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUA +MA8GA1UdEwEB/wQFMAMBAf8wDQYDVR0OBAYEBAECAwQwCgYIKoZIzj0EAwIDSAAw +RQIgWnMmH0yxAjub3qfzxQioHKQ8+WvUjAXm0ejId9Q+rDICIQDr30UCPj+SXzOb +Cu4psMMBfLujKoiBNdLE1KEpt8lN1g== +-----END CERTIFICATE----- diff --git a/chaincode-docker-devmode/msp/tlsintermediatecerts/tlsintermediate.pem b/chaincode-docker-devmode/msp/tlsintermediatecerts/tlsintermediate.pem new file mode 100644 index 0000000000..0feba1a64b --- /dev/null +++ b/chaincode-docker-devmode/msp/tlsintermediatecerts/tlsintermediate.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICETCCAbagAwIBAgIQNpgoASE9fi0ooZVKcnwnZzAKBggqhkjOPQQDAjBYMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzENMAsGA1UEChMET3JnMjENMAsGA1UEAxMET3JnMjAeFw0xNzA1MDgw +OTMwMzRaFw0yNzA1MDYwOTMwMzRaMGYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD +YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRQwEgYDVQQKEwtPcmcy +LWNoaWxkMTEUMBIGA1UEAxMLT3JnMi1jaGlsZDEwWTATBgcqhkjOPQIBBggqhkjO +PQMBBwNCAARTBJ8/o1tpHPwuixYDgRwcrzAru0cWJJhE6KWHAa0vBCG4nl0zjjRS +og+iAuUcY4Z/gJoHol6dKSHk9h5jrqtEo1QwUjAOBgNVHQ8BAf8EBAMCAaYwDwYD +VR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MA0GA1UdDgQGBAQBAgMEMA8G +A1UdIwQIMAaABAECAwQwCgYIKoZIzj0EAwIDSQAwRgIhAIkPzk7ORV/WhfG7QY/6 +/OJg4++ftz2SZc44NIuogMArAiEAqbnpnmmHnzo2Qc6gnliCegpGnJ18RUT/jZlj +1qXHcvg= +-----END CERTIFICATE----- diff --git a/chaincode-docker-devmode/myc.tx b/chaincode-docker-devmode/myc.tx index 180f942b6b602000048afd89acad38565ca73816..a9fb16c9ebe329ddf028ed912d63ba2c601ddf48 100644 GIT binary patch delta 73 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 TMqS!w>mM?@%|r}5vwHs>NuGA~